31 votes

En Javascript : Pourquoi new Date('2012-1-15') - new Date('2012-01-15') == 21600000

Je suis confus mais en javascript:

> new Date('2012-1-15') - new Date('2012-01-15')
  21600000

Pourquoi est-ce ainsi ? (21600000 / 1000 / 3600 == 6 heures)

38voto

Oz. Points 1140

Le format de date yyyy-mm-dd (2012-01-15) est interprété comme étant une date UTC tandis que yyyy-m-dd (2012-1-15) est interprété comme une date locale. Cela est visible si vous utilisez .toString sur chaque date.

> (new Date( '2012-01-15' )).toString()
"Sam. 14 Janv. 2012 16:00:00 GMT-0800 (Heure normale du Pacifique)"
> (new Date( '2012-1-15' )).toString()
"Dim. 15 Janv. 2012 00:00:00 GMT-0800 (Heure normale du Pacifique)"

Notez que je suis en Californie, d'où l'heure normale du Pacifique. Si vous êtes dans un fuseau horaire différent, vous obtiendrez des résultats différents.

Lorsque JavaScript interprète des dates, il essaie d'abord les formats utilisés dans plus de régions (comme l'UTC) avant de tenter les formats de date localisés. La dernière partie du format de date UTC est un décalage de fuseau horaire par rapport à GMT qui est supposé être 0 lorsqu'il est manquant (comme c'est le cas dans cet exemple). Pour obtenir la même date, vous auriez besoin du timestamp complet UTC: 2012-01-15T00:00:00-08:00.

10voto

Jukka K. Korpela Points 71599

Le résultat de new Date('2012-1-15') dépend de l'implémentation (norme ECMAScript, clause 15.9.4.2).

7voto

amka Points 91
a= new Date('2012-1-16') 
b= new Date('2012-01-16')
alert(a);
alert(b);

Pour le premier cas, la fonction constructeur définit l'heure à 00:00 dans votre fuseau horaire. Mais dans le deuxième cas, elle initialise l'heure par rapport à GMT +00:00

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X