Javascript Datumsobjekte und Sommerzeit
Ich sehe ein Verhalten, das ich mit Javascript-Datumsobjekten und Sommerzeitübergängen nicht verstehe. Wenn ich in der JavaScript-Konsole von Chrome Folgendes ausführ
var date = new Date(1268535600000); //2010-03-14T03:00:00.000Z (21:00 03-13 America/Chicago)
for(var i = 1; i <= 12; i++)
{
var time = date.getHours();
console.log(time)
console.log(date)
date.setHours(date.getHours() + 1);
}
die Ausgabe ist:
21
Sat Mar 13 2010 21:00:00 GMT-0600 (Central Standard Time)
22
Sat Mar 13 2010 22:00:00 GMT-0600 (Central Standard Time)
23
Sat Mar 13 2010 23:00:00 GMT-0600 (Central Standard Time)
0
Sun Mar 14 2010 00:00:00 GMT-0600 (Central Standard Time)
1
Sun Mar 14 2010 01:00:00 GMT-0600 (Central Standard Time)
1
Sun Mar 14 2010 01:00:00 GMT-0600 (Central Standard Time)
1
Sun Mar 14 2010 01:00:00 GMT-0600 (Central Standard Time)
1
Sun Mar 14 2010 01:00:00 GMT-0600 (Central Standard Time)
1
Sun Mar 14 2010 01:00:00 GMT-0600 (Central Standard Time)
1
Sun Mar 14 2010 01:00:00 GMT-0600 (Central Standard Time)
1
Sun Mar 14 2010 01:00:00 GMT-0600 (Central Standard Time)
1
Sun Mar 14 2010 01:00:00 GMT-0600 (Central Standard Time)
ndern Sie jedoch die letzte Zeile der for-Schleife in "@"
date = new Date(date.getTime() + 3600000)
produziert die Ausgabe, die ich mit der übersprungenen Stunde beim Übergang erwarten würde:
21
Sat Mar 13 2010 21:00:00 GMT-0600 (Central Standard Time)
22
Sat Mar 13 2010 22:00:00 GMT-0600 (Central Standard Time)
23
Sat Mar 13 2010 23:00:00 GMT-0600 (Central Standard Time)
0
Sun Mar 14 2010 00:00:00 GMT-0600 (Central Standard Time)
1
Sun Mar 14 2010 01:00:00 GMT-0600 (Central Standard Time)
3
Sun Mar 14 2010 03:00:00 GMT-0500 (Central Daylight Time)
4
Sun Mar 14 2010 04:00:00 GMT-0500 (Central Daylight Time)
5
Sun Mar 14 2010 05:00:00 GMT-0500 (Central Daylight Time)
6
Sun Mar 14 2010 06:00:00 GMT-0500 (Central Daylight Time)
7
Sun Mar 14 2010 07:00:00 GMT-0500 (Central Daylight Time)
8
Sun Mar 14 2010 08:00:00 GMT-0500 (Central Daylight Time)
9
Sun Mar 14 2010 09:00:00 GMT-0500 (Central Daylight Time)
Was ist der Grund, warum der erste Ansatz nicht funktioniert?
Edit: Außerdem scheint es bei einem DST-Übergang mit einer duplizierten Stunde die duplizierte Stunde beim ersten Ansatz einfach zu ignorieren: Wenn ich es mit einem DST-Übergang mit einer duplizierten Stunde versuche, scheint es, die duplizierte Stunde einfach zu ignorieren Stunde
Sun Nov 07 2010 00:00:00 GMT-0500 (Central Daylight Time)
Sun Nov 07 2010 01:00:00 GMT-0600 (Central Standard Time)
Sun Nov 07 2010 02:00:00 GMT-0600 (Central Standard Time)
Aber es behandelt die duplizierte Stunde korrekt mit dem zweiten Ansatz.