Comment assumer la zone de l'heure locale lors de l'analyse de l'ISO 8601 chaîne de date?
J'ai un ISO date de chaîne comme ci-dessous
var startTimeISOString = "2013-03-10T02:00:00Z";
quand je la convertir en objet date en javascript à l'aide de code ci-dessous, il retourne
var startTimeDate = new Date(startTimeISOString);
de sortie est
Date {Sun Mar 10 2013 07:30:00 GMT+0530 (India Standard Time)}
Il convertit le ISOString à jour, mais il convertit à l'heure locale depuis new Date()
est client dépendant. Comment convertir iso en date du temps de la chaîne de date et d'heure, mais pas de date locale en temps..?
Grâce
- Votre ISO de temps se termine avec "Z", ce qui signifie UTC (GMT). Si le temps est en fait local pour commencer, vous devez remplacer le 'Z' avec '+0530'. Mais si vous voulez aller-retour de votre temps, vous devriez garder la chaîne de version en UTC.
- pouvez-vous préciser ce que vous tentez de créer une représentation de chaîne qui conserve l'original fuseau horaire, dans ce cas Zoulou (Z), plutôt que de ré-interprétation de l'heure dans le fuseau horaire de l'ordinateur qui exécute le code. Il sonne comme vous, mais ce n'est pas 100% clair.
Vous devez vous connecter pour publier un commentaire.
Selon le MDN:
J'ai fait comme cela et je suis maintenant obtenir l'heure exacte à l'intérieur de l'ISO date de chaîne, au lieu de l'heure locale
Cela donnera à la même date, le temps à l'intérieur de l'iso chaîne de date , la sortie est ici
o/p
new Date(startTimeISOString.replace(/Z/,''))
. Note qu'un "ISO chaîne" n'est pas nécessairement Z, et en l'ajustant par l'hôte décalage horaire il représente un autre moment dans le temps à partir de l'original, où l'hôte décalage n'est pas +0000.Pour résumer la conversation à partir de tracevipin du post:
Tous les objets Date sont basées sur un valeur de temps c'est le nombre de millisecondes depuis 1970-01-01T00:00:00Z ils sont donc UTC à leur base. C'est différent pour UNIX, qui utilise une valeur qui représente les secondes depuis la même époque.
La Date.le prototype.toString méthode renvoie une mise en œuvre dépend de chaîne qui représente le temps sur la base de paramètres du système et le décalage horaire de la client (aka heure locale).
Si un UTC ISO8601 chaîne de temps est nécessaire, le Date.le prototype.toISOString méthode peut être utilisée. Il est très facile d'écrire une "cale" pour ce des méthodes si nécessaire.
Enfin, ne pas faire confiance à Date.analyser pour analyser une chaîne de caractères. Soutien pour une ISO8601 format UTC chaîne de caractères est spécifié dans l'ES5, cependant elle n'est pas systématiquement mis en œuvre dans les navigateurs utilisés. Il est beaucoup mieux d'analyser la chaîne manuellement (c'est pas dur, il y a des exemples de comment le faire) si large prise en charge du navigateur est nécessaire (par exemple, typique de l'application web).
Simple ISO8601 UTC horodatage de l'analyseur:
et voici une cale pour toISOString:
/[\-\.\+: TZ]/g
/\D/
. Il n'est pas conçue comme un général de l'ISO 8601 chaîne analyseur, qui est un très gros travail.Cela se produit parce que la date est imprimée à l'aide
toString
méthode qui renvoie par défaut de la date et de l'heure dans le fuseau horaire local. La méthodetoUTCString
vous donnera la chaîne que vous avez besoin.Date
conserve en fait la date unix temps en millisecondes et fournit des méthodes pour les manipuler.À la vanille javascript il n'y a pas un moyen pour créer une date qui suppose que l'heure locale de l'ISO chaîne mise en forme que vous lui donnez. Voici ce qui arrive lorsque vous passez une chaîne au format ISO 8601 pour javascript. Je vais utiliser une non de l'heure UTC, car il illustre le problème mieux que d'utiliser un ISO chaîne formatée:
var startTime = new Date("2013-03-10T02:00:00+06:00")
. Remarque cela pourrait aussi être2013-03-10T02:00:00Z
ou de tout autre ISO-chaîne formatée.Toutes les fonctions, à l'exception de celles qui vous donnent un UTC représentation de ce nombre, va utiliser le fuseau horaire de l'ordinateur qui exécute le code à interpréter ce nombre comme un temps.
De faire ce que l'affiche originale veut, vous en avez besoin.
Ce n'est pas trivial, et nécessite une interprétation complète de la 8601 spec. Beaucoup trop de code pour mettre ici.
C'est exactement ce que moment.js est conçu pour faire. Je vous recommande fortement de l'utiliser. À l'aide de moment.js:
cela se traduira dans l'impression de l'ISO temps de la chaîne d'origine, la préservation de l'offset.