web-dev-qa-db-fra.com

new Date () fonctionne différemment dans Chrome et Firefox

Je veux convertir la chaîne de date en Date par javascript, utilisez le code suivant:

var date = new Date('2013-02-27T17:00:00');
alert(date);

'2013-02-27T17:00:00' est l'heure UTC dans l'objet JSON du serveur.

Mais le résultat du code ci-dessus est différent entre Firefox et Chrome:

Firefox renvoie: 

Wed Feb 27 2013 17:00:00 GMT+0700 (SE Asia Standard Time)

Chrome renvoie:

Thu Feb 28 2013 00:00:00 GMT+0700 (SE Asia Standard Time) 

C'est différent 1 jour, le résultat correct que j'attendais est le résultat de Chrome.

Code de démonstration: http://jsfiddle.net/xHtqa/2/

Comment puis-je résoudre ce problème pour obtenir le même résultat des deux?

85
cuongle

Le format correct pour UTC serait 2013-02-27T17:00:00Z (Z est pour l'heure zoulou). Ajoutez Z s'il n'est pas présent pour obtenir la chaîne de date/heure UTC correcte.

62
Petr Abdulin

Oui, malheureusement, les algorithmes d'analyse de date dépendent de la mise en oeuvre. A partir de la spécification de Date.parse (utilisée par new Date ):

La chaîne peut être interprétée comme une heure locale, une heure UTC ou une heure dans un autre fuseau horaire, en fonction du contenu de la chaîne. La fonction tente d’abord d’analyser le format de la chaîne en fonction des règles spécifiées dans le format de date et heure ( 15.9.1.15 ). Si la chaîne n'est pas conforme à ce format, la fonction peut utiliser des méthodes heuristiques ou des formats de date spécifiques à l'implémentation.

Pour que le constructeur Date pas (peut-être) utilise le fuseau horaire local, utilisez une chaîne datetime contenant des informations sur le fuseau horaire, par exemple: "2013-02-27T17:00:00Z". Cependant, il est difficile de trouver un format fiable, analysé par tous les navigateurs - le format ISO n’est pas reconnu par IE <8 (voir JavaScript: les navigateurs qui prennent en charge l’analyse de ISO-8601 Date String avec Date.parse ) . Mieux, utilisez un horodatage Unix, c’est-à-dire quelques millisecondes depuis unix Epoch , ou utilisez une expression régulière pour décomposer la chaîne en ses parties, puis insérez-les dans Date.UTC .

28
Bergi

J'ai trouvé une chose ici. Il semble que la console d'inspecteur de Firefox native ait un bogue: Si j'exécute "new Date ()" dans l'inspecteur natif, il affiche une date avec un fuseau horaire incorrect, les paramètres régionaux GMT, mais en exécutant la même commande dans la console d'extension Firebug. , la date indiquée utilise mon fuseau horaire correct (GMT-3: 00).

3
Sergio Abreu

Essayez d'utiliser moment.js. Cela se passe très bien et de manière similaire avec tous les navigateurs. vient avec beaucoup d'options de formatage. utiliser moment ('date'). format ("") au lieu de nouvelle date ('date')

0
MSIslam