5.2 Y2K  
Auch JavaScript war von dem legendären Jahr-2000-(Y2K-)Problem betroffen, allerdings ist das hier nicht so schlimm wie in weiten Teilen der Wirtschaft. Probleme bereiten hier (natürlich) wieder Browser von anno Tobak. Die Krux liegt in der Methode getYear(). Je nach Browser werden manche Jahre anders interpretiert. Die folgende Tabelle zeigt auf, welche Rückgabewerte die verschiedenen JavaScript-Versionen bei den jeweiligen Zeiträumen vorschreiben. Dabei bedeutet »volle Jahreszahl« eine vierstellige Jahreszahl (außer natürlich bei Jahreszahlen vor 1000); »kurze Jahreszahl« bedeutet eine zweistellige Jahreszahl im 20. Jahrhundert, also etwa »99« statt »1999«.
Tabelle 5.2 Die Behandlung von Jahreszahlen in den verschiedenen JavaScript-Versionen
Zeitraum
|
JS 1.0
|
JS 1.1/1.2
|
JS 1.3 und höher
|
<1970
|
Nicht unterstützt
|
Volle Jahreszahl
|
Jahreszahl minus 1900 (1800 wird durch –100 dargestellt)
|
1970...1999
|
Jahreszahl minus 1900
|
Kurze Jahreszahl
|
Jahreszahl minus 1900
|
ł2000
|
Jahreszahl minus 1900
|
Volle Jahreszahl
|
Jahreszahl minus 1900
|
In der Praxis ist das nicht viel wert, weil beispielsweise der Internet Explorer 5/6 sich nicht an die Vorgaben hält und im Jahr 2002 als Jahreszahl auch tatsächlich 2002 zurückgibt (und nicht etwa 102). Die vorherige Tabelle wirkt zudem etwas einschüchternd. Ist es etwa nötig, mühsam eine Fallunterscheidung nach JavaScript-Versionen durchzuführen?
In der Praxis gibt es glücklicherweise einen relativ einfachen Ausweg. Üblicherweise liegen alle verwendeten Daten im Bereich von 1970 bis ins 21. Jahrhundert hinein. Eine Jahreszahl kleiner als 200 ist also um 1900 zu niedrig; andere Jahreszahlen sind – nehmen wir einfach einmal an – korrekt. Man kann also eine Funktion schreiben, die das Y2K-sichere Jahr zurückgibt:
function getYearY2K(d) {
var y = d.getYear();
if (y < 200) {
return y + 1900;
} else {
return y;
}
}
Ab JavaScript 1.3 (also in allen aktuellen Browsern) gibt es eine Methode getFullYear(), die grundsätzlich kein verkürztes Datum zurückgibt, sondern stets die volle Jahreszahl. Alle Browser, die heute eine messbare Verbreitung haben, sollten diese Methode unterstützen. Eine Alternative besteht darin, ein eigenes Datumsobjekt zu schreiben; das nötige Rüstwerkzeug bekommen Sie in Kapitel 13.
|