2013-08-27 6 views
1

Je crée de nouveaux objets date dans javascript et je constate des incohérences selon que j'utilise le paramètre dateString ou les paramètres entiers année/mois/jour.Incohérences lors de la création de nouveaux objets de date

Voici un exemple:

var dt1 = new Date(1979,3,5); 
var dt2 = new Date('1979-04-05'); 

jsFiddle with example

DT1 est attribué la valeur: 05 Jeu avril 1979 00:00:00 GMT-0500 (heure avancée du Centre)

DT2 est attribué la valeur: Wed Avr 04 1979 19:00:00 GMT-0500 (Central Daylight Time)

Quelqu'un peut-il expliquer ce comportement? Le deuxième exemple (dt2) se trouve être le format que Chrome renvoie une date sélectionnée à partir des éléments d'entrée [type = date], c'est pourquoi j'essaie de comprendre cela.

+0

On dirait que le décalage horaire GMT pour moi – Jonathan

+0

Pourriez-vous expliquer pourquoi vous vous attendez même 'new Date ('4,5,1979')' à se comporter d'une manière particulière? La chaîne ''4,5,1979'' n'est même pas formatée en tant que date (pas dans un format que je reconnais, de toute façon). – NPE

+0

C'est ce que je pensais. Est-ce que c'est par conception cependant? Pourquoi un offset ne serait-il utilisé que lors de l'utilisation du paramètre dateString? – joshb

Répondre

4

Il semble que le formulaire '1979-04-05' soit interprété comme une date UTC (et que la date UTC soit convertie en heure locale lorsqu'elle est affichée). Le formulaire new Date(1979,3,5); est interprété comme heure locale. Vous pouvez utiliser Date.UTC pour forcer l'heure UTC pour le formulaire à 3 arguments (see docs).

Date analyse syntaxique (et gestionnaire de fuseau horaire en particulier) est généralement pas uniforme à travers les navigateurs, et il est préférable de ne pas dépendre - utiliser UTC lorsque cela est possible, ou utilisez une bibliothèque séparée comme Date.js ou moment.js.

Questions connexes