Chrome fuseau horaire de l'option à la Date d'.toLocaleString()
J'ai récemment découvert qu'il y est une nouvelle extension pour le JavaScript. Cela ajoute plusieurs fonctionnalités à la Date
objet dans le toLocaleString
, toLocaleDateString
et toLocaleTimeString
fonctions. Référence ici.
Je suis particulièrement intéressé par les timeZone
option, qui prend en charge IANA/Olson fuseaux horaires, comme America/New_York
ou Europe/London
. Ce n'est actuellement pris en charge dans Google Chrome.
Les avis précédents, c'est que de travailler en JavaScript avec un autre fuseau horaire UTC ou de votre propre fuseau horaire local, on avait à utiliser une bibliothèque. Mais maintenant, il semble que cela commence à être intégrés directement dans le navigateur. Alors maintenant, vous pouvez faire ceci:
new Date().toLocaleString("en-US", {timeZone: "America/New_York"})
//output: "7/4/2013 5:15:45 PM"
Ou:
new Date().toLocaleString("en-NZ", {timeZone: "Pacific/Chatham",
timeZoneName: "long"})
//output: "7/5/2013 9:59:52 AM GMT+12:45"
Ou:
new Date().toLocaleString("en-GB", {timeZone: "Europe/London",
timeZoneName: "short"})
//output: "4/7/2013 22:18:57 United Kingdom Time"
//(strange time zone name, but ok)
C'est très cool, mais j'ai quelques questions:
- Cela fait-il partie d'une nouvelle norme? Peut-être enterré quelque part dans ECMAScript 6? Ou est-ce juste quelque chose de personnalisé à google Chrome?
- Pourquoi Google Chrome? Est-il pris en charge n'importe où ailleurs? Existe-il des plans de prise en charge n'importe où d'autre?
- J'ai vérifié node.js qui utilise google Chrome, runtime JavaScript, mais il ne doit pas y travailler. Pourquoi pas?
- Est le fuseau horaire de données accessible de toute autre manière que les fonctions que je suis inscrit? Si seulement disponible lorsque le formatage de chaînes de caractères, puis de faire les calculs sur la base des résultats peut être difficile.
-
C'est axée sur les résultats, mais comment pourrais-je l'utiliser pour l'entrée? Est-il un moyen de passer le temps de la zone dans le constructeur de la
Date
objet? J'ai essayé le suivant://parsing it with a date and time new Date("2013-01-01 12:34:56 America/New_York") //passing it as a named option new Date(2013,0,1,12,34,56,{timeZone:"America/New_York"})
Ni travaillé. Je ne pouvais pas trouver quelque chose dans les specs, donc je ne pense pas que cela existe (encore), mais s'il vous plaît dites-moi si je me trompe.
-
Le problème décrit dans ce post, créé par une faille dans le ECMAScript 5 spec, affecte encore la sortie, même lorsque les données appropriées dans le TZDB. Comment est-ce que les anciens et les nouveaux implémentations de la coexistence? On pourrait penser qu'il serait à l'ancienne, ou de la totalité d'une nouvelle manière. Par exemple, avec mon ordinateur est temps ensemble de la zone US, Heure de l'est:
new Date(2004,10,7,0,0).toLocaleString("en-US",{timeZone:"America/New_York"})
retourne
"11/6/2004 11:00:00 PM"
. Il doit retourner à minuit, depuis que j'ai commencé à minuit et mon fuseau horaire local correspond au temps de sortie de la zone. Mais elle impose la condition d'entrée date au mauvais UTC, en raison de la ES5 question. -
Puis-je s'attendre à ce que l'IANA mises à jour pour la TZDB que Google va pousser les mises à jour de Chrome qui contiennent les modifications?
Vous devez vous connecter pour publier un commentaire.
mise à jour
Il est assez vaste, écrire au sujet de l'API ici
Oui, ils font partie de la ECMAScript l'Internationalisation de l'API. Il est mis en œuvre distincte de ECMAScript, mais l'exigence de la mise en œuvre de ECMAScript l'Internationalisation de l'API est d'abord mise en œuvre correcte de ECMAScript 5.1
Pendant les dernières années, Google Chrome a surtout été la première à mettre en œuvre de nouvelles fonctionnalités. Mozilla est plus conservatrice, encore par exemple la question de savoir si pour mettre en œuvre les
download
attribut dea
éléments. Il est maintenant disponible dans IE11 Bêta et Opéra trop. Il sera disponible en Firefox 25.node.js utilise le même moteur, qui est un projet distinct à partir du navigateur Google Chrome. Le moteur intègre Ecmascript 5.1. C'est une extension node.js pour la mise en œuvre séparément dès maintenant. Il sera disponible dans V8 dans le T3 donc probablement un peu après que vous pouvez l'utiliser dans node.js.
Il n'y a rien à propos de saisie des dates dans le cahier des charges. Personnellement, je ne vois pas en quoi ce serait utile, vous le faites mal, si vous n'êtes pas transmettre les horodatages UTC parce que quelque chose comme
"2013-01-01 12:34:56 America/New_York"
est ambigu pendant la transition de l'heure d'été à l'heure d'hiver.C'est d'entrée de problème, pas de sortie. De nouveau, la construction d'une date avec le fuseau horaire local que vous ne pouvez pas influencer ou de la détection est de faire le mal. Utiliser le timestamp de la surcharge du constructeur ou
Date.UTC
.Rien dans la spec, mais je pense qu'il serait raisonnable de s'attendre à ce que les règles ne sont pas trop en arrière.
new Date(y,m,d,h,m,s,ms)
constructeur aurait le même problème. La plupart des autres langues que cela permettra aux temps d'entrée. Le mieux sera d'erreur/jeter quand invalide ou ambiguë de temps, mais beaucoup d'autres il suffit de choisir l'un ou de l'autre de manière arbitraire. Actuellement, en JavaScript, ni l'erreur, mais chaque navigateur-t-il son propre truc.new Date(2013,2,10,2,30)
- Chrome rembobine à 1:30 alors que IE avances à 3:30. Les meilleures implémentations de prendre en heure locale, fuseau horaire, et un décalage. Donc un sans ambiguïté d'entrée pourrait être quelque chose commenew Date("2013-11-03T01:00:00-04:00","America/New_York")
Option value 'AMERICA/NEW_YORK' for 'timeZone' is outside of valid range. Expected: ['UTC']
'UTC'
est optionnel. Si vous voulez que votre fuseau horaire local pour être utilisés, essayez de laisser l'argument complètement.En effet, il fait partie de la nouvelle ECMA-402 standard. La norme est très difficile à lire, mais il est ce sympathique introduction.
MDN a une liste de soutenir les navigateurs. Selon Bug 853301 il sera disponible dans Firefox 25.
Les raisons possibles sont nombreuses; il n'est pas jusqu'à l'actuel code de base, ou il serait le node.js plus gros et plus lent (la précédente bug tracker entrée de Mozilla indique que les données de fuseau horaire a augmenté la taille de téléchargement de Firefox par 10 %, et a causé le I/O pour augmenter sensiblement au cours du démarrage du navigateur vers le haut.
Semble qu'il n'est pas disponible. En outre, l'Intl API amorce des pourparlers que seule l'heure UTC et l'heure locale de la zone sont absolument nécessaires pour être pris en charge.
L'Intl API ne parle à propos de la date/heure de mise en forme, la chaîne de classements et de la mise en forme des nombres. Datetime mise en forme prend en charge non seulement le calendrier Grégorien, mais aussi de nombreux types de d'autres calendriers, lunaire, luni-solaire et ainsi de suite.
La raison en est que ES5 mandats que l'entrée de la nouvelle Date sera calculé en utilisant le courant de l'heure d'été et à l'offset, c'est l'Amérique/New York, mais avec HAE fuseau horaire, même si Nov 6 n'est pas dans l'EDT. Évidemment, comme c'est précisé, alors il ne peut pas être changé. Cependant, comme le Chrome est l'aide de l'TZDB pour faire la conversion à partir de la nue-UTC point-à-temps de la valeur à l'Amérique/New York tz, il prend en compte le temps comme dans l'est.
J'aimerais le croire