Antje Hofmann: Kennt JavaScript keine Schaltjahre?

Beitrag lesen

Hallo Markus

Um ein Script auch für Schaltjahre, genaugenommen den 29.Februar, zu testen,
setze ich das Datum auf eben diesen 29.02.2004. Nun sagen mir diverse Browser
(IE6, NS4, NS6) penetrant, dies sei der 01.03.2004.
Bei allen anderen "echten" Daten geben sie das gesetzte Datum zurück,
nur beim 29.Februar nicht.

der Fehler ist recht simpel. Führe mal folgendes Beispiel aus und versuche nachzuvollziehen, was da warum passiert:

var test_time = new Date();
document.write("Jetzt: ",test_time.toGMTString(),"<br>");
test_time.setHours(9);
document.write("Stunde: ",test_time.toGMTString(),"<br>");
test_time.setMonth(1);
document.write("Monat: ",test_time.toGMTString(),"<br>");
test_time.setDate(29);
document.write("Tag: ",test_time.toGMTString(),"<br>");
test_time.setYear(2000);
document.write("Jahr: ",test_time.toGMTString(),"<br>");

document.write("<hr>");
var test_time = new Date();
document.write("Jetzt: ",test_time.toGMTString(),"<br>");
test_time.setHours(9);

test_time.setYear(2000);
document.write("Jahr: ",test_time.toGMTString(),"<br>");

document.write("Stunde: ",test_time.toGMTString(),"<br>");
test_time.setMonth(1);
document.write("Monat: ",test_time.toGMTString(),"<br>");
test_time.setDate(29);
document.write("Tag: ",test_time.toGMTString(),"<br>");

document.write("<hr>");
var test_time = new Date();
document.write("Jetzt: ",test_time.toGMTString(),"<br>");
test_time.setHours(9);

test_time.setYear(2000);
document.write("Jahr: ",test_time.toGMTString(),"<br>");

document.write("Stunde: ",test_time.toGMTString(),"<br>");
test_time.setMonth(13);
document.write("Monat (+13 Monate): ",test_time.toGMTString(),"<br>");
test_time.setDate(29);
document.write("Tag: ",test_time.toGMTString(),"<br>");

document.write("<hr>");
var test_time = new Date();
document.write("Jetzt: ",test_time.toGMTString(),"<br>");
test_time.setHours(9);

test_time.setYear(2000);
document.write("Jahr: ",test_time.toGMTString(),"<br>");

document.write("Stunde: ",test_time.toGMTString(),"<br>");
test_time.setMonth(1);
document.write("Monat:  ",test_time.toGMTString(),"<br>");
test_time.setDate(60);
document.write("Tag (+60 Tage): ",test_time.toGMTString(),"<br>");

Als Hilfestellung noch einen Satz aus der Netscapedoku:

If a parameter you specify is outside of the expected range, setMonth attempts to update the date information in the Date object accordingly. For example, if you use 15 for monthValue, the year will be incremented by 1 (year + 1), and 3 will be used for month.

Viele Grüße

Antje