94 votes

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

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

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

'2013-02-27T17:00:00' UTC heure en objet JSON à partir du serveur.

Mais le résultat de code ci-dessus est la différence entre Firefox et Chrome:

Firefox retourne:

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

Chrome retourne:

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

C'est différent de 1 jour, le résultat correct, je m'attends à ce est le résultat de google Chrome.

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

Comment puis-je résoudre ce problème pour obtenir le même résultat à la fois?

J'utilise les plus récentes de Chrome: 25.0.1364.97 m et Firefox: 19.0 sur Windows 7

69voto

Petr Abdulin Points 7297

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

31voto

Bergi Points 104242

Ouais, malheureusement la date-l'analyse des algorithmes dépendent de l'implémentation. À partir de la spécification d' Date.parse (qui est utilisé par new Date):

La Chaîne peut être interprétée comme une, heure locale, l'heure UTC, ou une heure dans un autre fuseau horaire, selon le contenu de la Chaîne. La fonction première tente d'analyser le format de la Chaîne selon les règles qui s'appelle dans Date Heure Format de Chaîne de caractères (15.9.1.15). Si la Chaîne n'est pas conforme à ce format, la fonction peut tomber à n'importe quel spécifiques à l'implémentation de l'heuristique ou la mise en œuvre spécifique de formats de date.

Pour faire de l' Date constructeur pas (peut-être) utiliser le fuseau horaire local, utilisez un datetime chaîne avec le fuseau horaire de l'information, par exemple, "2013-02-27T17:00:00Z". Cependant, il est difficile de trouver un format qui est fiable analysée par tous les navigateurs - ISO format n'est pas reconnu par IE<8 (voir JavaScript: Qui des navigateurs prennent en charge l'analyse de la norme ISO-8601 Chaîne de Date à Date.analyser). Mieux, utiliser un timestamp unix, c'est à dire millisecondes écoulées depuis l'époque unix, ou utiliser un regulare expression de briser la chaîne dans ses parties et à nourrir ceux qui en Date.UTC.

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