2013-09-26 3 views
1

J'ai un site Web où les dates sont envoyées vers et depuis le serveur en utilisant JSON.stringify(). Si le client a écrit un commentaire il est envoyé au serveur avec une chaîne de date, qui ressemble à ceJavaScript Date() dysfonctionnement entre les fuseaux horaires?

"2013-09-21T04:00:00.000Z" 

Lorsque le serveur reçoit la chaîne que je crée une nouvelle date de la chaîne

var server_date = new Date("2013-09-21T04:00:00.000Z"); 

Cette La variable date est stockée dans un MongoDB. Mais lorsque le client recharge la page de la chaîne date à laquelle le client reçoit ressemble

"2013-09-21T00:00:00.000Z" 

Et quand je fais une nouvelle date de cette chaîne sur le client

var client_date = new Date("2013-09-21T00:00:00.000Z"); 

l'objet de la date est incorrecte. D'une manière ou d'une autre, lorsque je définis le paramètre client_date, la date est définie sur 9/20/2013 plutôt que sur 21/09/2013. Lors de l'exécution du serveur sur ma machine locale, cela n'a jamais été un problème. Actuellement, le serveur fonctionne sur AWS, donc je suppose que c'est en quelque sorte jouer avec les dates? Mais je ne comprends pas comment la variable client_date est définie un jour avant la date spécifiée dans la chaîne, indépendamment des heures-min-secondes. Comment puis-je formater mes dates pour résoudre ce problème? Merci!

Répondre

2

Z signifie temps universel coordonné (UTC) ou temps moyen de Greenwich (GMT). Par conséquent, quand c'est 2013-09-21T00:00:00.000Z à Greenwich, c'est toujours le 20 septembre ouest jusqu'à l'endroit où se trouve votre client.

+0

Merci! Pour corriger le problème, je supprime simplement l'aspect temporel de la date et crée une nouvelle date avec le jour, le mois et l'année. Y a-t-il un moyen d'éviter le problème? – ORL

+0

Pourquoi votre date String ressemble à '2013-09-21T00: 00: 00.000Z'? Utilisez-vous 'new Date(). ToJSON()'? Quoi qu'il en soit, c'est probablement l'heure du client, s'il se trouve dans un fuseau horaire différent. Si vous voulez un temps cohérent, et que vous utilisez PHP, utilisez 'date_default_timezone_set ('America/Los_Angeles')' avec le fuseau horaire correct et faites quelque chose comme '$ dt = date ('D M Y h: i: s'). ' GMT-0700 (heure normale du Pacifique) '; 'pour que cela ressemble à la sortie JavaScript. Bien sûr, utilisez le fuseau horaire correct. – PHPglue

Questions connexes