2010-10-25 8 views
4

Je vois un comportement que je ne comprends pas avec les objets de date Javascript et les transitions DST. Si j'exécutez la commande suivante dans la console javascript ChromeJavascript Date objets et l'heure d'été

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);   
} 

la sortie est:

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) 

Toutefois, la modification de la dernière ligne de la boucle à

date = new Date(date.getTime() + 3600000) 

produit la sortie I » d attendre avec l'heure sautée à la transition:

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) 

Quelle est la raison pour laquelle la première approche ne fonctionne pas?

Edit: De plus, avec une transition DST avec une heure dupliquée il semble simplement ignorer l'heure en double avec la première approche: L'autre chose est que si je l'essayer avec une transition DST avec une heure dupliquée juste semble ignorer l'heure dupliquée:

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) 

Mais il gère correctement l'heure dupliquée avec la deuxième approche.

Répondre

1

Peut-être que c'est un bug. L'avez-vous essayé sur plus d'un navigateur? Sinon, je suppose que puisque vous essayez de régler les heures à une heure qui n'existe pas, il rejette le changement.

+0

Oui, j'ai le même comportement dans Firefox en utilisant Firebug que la console. –

+0

Je ne suis pas sûr si c'est juste dû à l'heure invalide car il y a aussi une certaine étrangeté avec une transition DST avec une heure répétée (j'ai mis à jour la question avec ce cas) –

+0

@Will, votre nouveau cas ne change pas ma réponse à tout. La transition d'automne ne contient aucun temps invalide, elle double juste une heure: 01:00 à 01:59 arrive deux fois. Il est intéressant de choisir CST plutôt que de conserver la valeur précédente de CDT, mais les deux réponses sont correctes. Pour la transition de printemps, 02h00 à 02h59 n'existent pas, donc définir l'heure n'importe où dans cet intervalle serait une erreur. –