Comment puis-je recueillir les informations de fuseau horaire du visiteur? J'ai besoin du fuseau horaire, ainsi que des heures de décalage GMT.
javascript
timezone
Árvíztűrő tükörfúrógép
la source
la source
Réponses:
Notez que tous les fuseaux horaires ne sont pas décalés par des heures entières: par exemple, Terre-Neuve est UTC moins 3 h 30 (ce qui laisse l'heure d'été hors de l'équation).
la source
getTimezoneOffset
inexactitude est-elle en vigueur? L'article auquel vous faites référence est daté de juin 2007 et ne contient aucun détail sur l'inexactitude de la fonction. Et en fait, la bibliothèque quejsTimezoneDetect
vous avez pointée utilisegetTimezoneOffset
elle-même.var hrs = -(new Date().getTimezoneOffset() / 60)
pour compenser les heures généralement utiliséestimezone
! =utc offset
L'utilisation d'un décalage pour calculer le fuseau horaire est une mauvaise approche et vous rencontrerez toujours des problèmes. Les fuseaux horaires et les règles d'heure d'été peuvent changer à plusieurs reprises au cours d'une année, et il est difficile de suivre les changements.
Pour obtenir le fuseau horaire IANA du système en JavaScript, vous devez utiliser
En septembre 2019, cela fonctionne dans 95% des navigateurs utilisés dans le monde .
Anciennes informations de compatibilité
ecma-402 / 1.0 indique que cela
timeZone
peut être indéfini s'il n'est pas fourni au constructeur. Cependant, le futur brouillon (3.0) a résolu ce problème en passant au fuseau horaire par défaut du système.dans ecma-402 / 3.0 qui est encore dans un projet, il est devenu
la source
Je me rends compte que cette réponse est un peu hors sujet, mais j'imagine que beaucoup d'entre nous à la recherche d'une réponse voulaient également formater le fuseau horaire pour l'affichage et peut-être aussi l'abréviation de la zone. Alors c'est parti ...
Si vous voulez que le fuseau horaire du client soit bien formaté, vous pouvez vous fier à la méthode JavaScript Date.toString et faire:
Cela vous donnera par exemple «GMT-0400 (EST)», y compris les minutes du fuseau horaire, le cas échéant.
Alternativement, avec regex, vous pouvez extraire n'importe quelle partie souhaitée:
Pour "GMT-0400 (EDT)":
Pour "GMT-0400":
Pour "EDT":
Pour "-0400" seulement:
Référence Date.toString: https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Date/toString
la source
split[4] + " " + split[5]
?!split
contient:["Mon", "Mar", "13", "2017", "14:05:22", "GMT-0400", "(Eastern", "Daylight", "Time)"]
donc le résultat estDaylight Time)
new Date().toString()
dépend complètement de vos paramètres régionaux. Attendre des sorties des autres clients qu'elles ressemblent aux vôtres est une très mauvaise idée.On a déjà répondu comment obtenir l'offset en minutes sous forme d'entier, mais au cas où quelqu'un voudrait l'offset GMT local sous forme de chaîne, par exemple
"+1130"
:la source
pad(parseInt(Math.abs(offset/60)), 2)
pour le faire correctement ... sinon vous pourriez finir par obtenir +5.530 comme dans mon cas ... je ne sais pas si le plancher de mathématiques, etc. sera une meilleure chose ici ou non .... mais cela au moins me donne +0530 comme prévuVous pouvez utiliser:
fuseau horaire
La détection du fuseau horaire du navigateur est plutôt délicate à effectuer, car il y a peu d'informations fournies par le navigateur.
Moment Timezone utilise
Date.getTimezoneOffset()
etDate.toString()
sur une poignée de moments de l'année en cours pour collecter autant d'informations que possible sur l'environnement du navigateur. Il compare ensuite ces informations avec toutes les données de fuseau horaire chargées et renvoie la correspondance la plus proche. En cas d'égalité, le fuseau horaire avec la ville la plus peuplée est retourné.la source
J'ai écrit une fonction dans mon projet, qui renvoie le fuseau horaire au
hh:mm
format. J'espère que cela peut aider quelqu'un:Afficher l'extrait de code
Violon de travail
la source
Une ligne unique qui donne à la fois le décalage et le fuseau horaire consiste à simplement appeler toTimeString () sur un nouvel objet Date. De MDN:
Le hic, c'est que le fuseau horaire n'est pas au format IANA standard; il est un peu plus convivial que le format IANA "continent / ville" . Essaye le:
En Californie en ce moment,
toTimeString()
revientPacific Daylight Time
tandis que l'API Intl revientAmerica/Los_Angeles
. En Colombie, vous auriezColombia Standard Time
, contreAmerica/Bogota
.Notez que de nombreuses autres réponses à cette question tentent d'obtenir les mêmes informations en appelant Date.toString (). Cette approche n'est pas aussi fiable que explique MDN :
la source
essai
getTimezoneOffset()
de l'Date
objet:Cette méthode renvoie le décalage horaire en minutes, qui est la différence entre l'heure GMT et l'heure locale en minutes.
la source
JavaScript:
la source
Avec moment.js :
la source
z
etzz
ont été dépréciés à partir du 1.6.0 voir momentjs.com/docs/#/displaying/formatZ
etZZ
.zoneAbbr()
a remplacéz
etzz
. Voir la documentation iciAvec momentjs, vous pouvez trouver le fuseau horaire actuel
Avec dayjs, vous pouvez trouver le fuseau horaire actuel
Les deux API renvoient le décalage utc en quelques minutes.
la source
getTimezoneOffset()
.Fuseau horaire en heures-
Si vous voulez être précis comme vous l'avez mentionné dans le commentaire, alors vous devriez essayer comme ça-
la source
Si vous n'avez besoin que de l'abréviation du fuseau horaire "MST" ou "EST":
la source
Date.toString()
n'est pas fiable et MDN explique pourquoi. J'ai collé la section pertinente de leurs documents dans ma réponse .Voir cet opérateur résultant était opposé au fuseau horaire. Donc, appliquez une fonction mathématique puis validez le nombre moins ou plus.
Voir le document MDN
la source
round
? Ça devrait l'êtrefloor
, non?Exemple: jeu 21 juin 2018 18:12:50 GMT + 0530 (heure standard de l'Inde)
O / P: +0530
la source
Date.toString()
n'est pas fiable et MDN explique pourquoi. J'ai collé la section pertinente de leurs documents dans ma réponse .Essaye ça,
la source
Cette valeur provient de la machine de l'utilisateur et peut être modifiée à tout moment, donc je pense que cela n'a pas d'importance, je veux juste obtenir une valeur approximative puis la convertir en GMT sur mon serveur.
Par exemple, je viens de Taïwan et cela me renvoie "+8".
Exemple de travail
JS
HTML
Résultat
la source
Sur le
new Date(
), vous pouvez obtenir le décalage, pour obtenir le nom du fuseau horaire, vous pouvez faire:new Date().toString().replace(/(.*\((.*)\).*)/, '$2');
vous obtenez la valeur entre
()
à la fin de la date, c'est le nom du fuseau horaire.la source
Date.toString()
n'est pas fiable et MDN explique pourquoi. J'ai collé la section pertinente de leurs documents dans ma réponse . De plus, cette réponse a déjà été donnée au moins 3 fois.Ce serait ma solution: