Question Obtenir le fuseau horaire du client en JavaScript


Comment puis-je recueillir les informations sur le fuseau horaire du visiteur? J'ai besoin du fuseau horaire, ainsi que des heures de décalage GMT.


413
2017-07-07 09:48


origine


Réponses:


var offset = new Date().getTimezoneOffset();
console.log(offset);

Le décalage horaire est la différence, en minutes, entre l'heure UTC et l'heure locale. Notez que cela signifie que le décalage est positif si le fuseau horaire local est derrière UTC et négatif s'il est en avance. Par exemple, si votre fuseau horaire est UTC + 10 (Australian Eastern Standard Time), -600 sera renvoyé. L'heure d'été empêche cette valeur d'être constante même pour un lieu donné

Notez que tous les fuseaux horaires ne sont pas compensés par des heures entières: par exemple, Terre-Neuve est UTC moins 3h 30m (laissant l'heure d'été exclue de l'équation).


418
2017-07-07 09:53



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 un fuseau horaire correct en JavaScript, vous devez utiliser

console.log(Intl.DateTimeFormat().resolvedOptions().timeZone)

Malheureusement, au moment d'écrire ceci, il n'est pas encore largement soutenu.
Je sais que cela fonctionne correctement au moins dans Chrome.

ecma-402 / 1.0 dit que timeZone peut être indéfini s'il n'est pas fourni au constructeur. Cependant, le futur brouillon (3.0) a corrigé ce problème en changeant le fuseau horaire par défaut du système.

Dans cette version de l'API ECMAScript Internationalization, le    timeZone la propriété restera indéfinie si aucun timeZone la propriété était   fourni dans l'objet d'options fourni au Intl.DateTimeFormat   constructeur. Cependant, les applications ne doivent pas compter sur cela, car   les versions peuvent renvoyer une valeur String identifiant l'environnement hôte   plutôt que le fuseau horaire actuel.

en ecma-402 / 3.0 qui est encore dans un projet, il a changé à

Dans cette version de l'API ECMAScript 2015 Internationalization, le    timeZone propriété sera le nom du fuseau horaire par défaut si non    timeZone la propriété a été fournie dans l'objet d'options fourni à    Intl.DateTimeFormat constructeur. La version précédente a quitté le    timeZone propriété non définie dans ce cas.

Donc, avant de l'utiliser, vérifiez le support actuel sur les navigateurs par exemple à:
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/DateTimeFormat/resolvedOptions


195
2018-01-05 01:07



Je me rends compte que cette réponse est un peu hors sujet mais j'imagine que beaucoup d'entre nous, cherchant une réponse, voulaient aussi formater le fuseau horaire pour l'affichage et peut-être aussi obtenir l'abréviation de la zone. Alors voila ...

Si vous souhaitez que le fuseau horaire du client soit bien formaté, vous pouvez vous fier à la méthode JavaScript Date.toString et faire:

var split = new Date().toString().split(" ");
var timeZoneFormatted = split[split.length - 2] + " " + split[split.length - 1];

Cela vous donnera "GMT-0400 (EST)" par exemple, y compris les minutes de fuseau horaire le cas échéant.

Alternativement, avec regex vous pouvez extraire n'importe quelle partie désirée:

Pour "GMT-0400 (EDT)":

new Date().toString().match(/([A-Z]+[\+-][0-9]+.*)/)[1]

Pour "GMT-0400":

new Date().toString().match(/([A-Z]+[\+-][0-9]+)/)[1]

Pour juste "EDT":

new Date().toString().match(/\(([A-Za-z\s].*)\)/)[1]

Pour juste "-0400":

new Date().toString().match(/([-\+][0-9]+)\s/)[1]

Référence Date.toString: https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Date/toString


107
2018-03-08 22:50



Il a déjà été répondu comment obtenir offset en minutes comme un nombre entier, mais dans le cas où quelqu'un veut le décalage GMT local comme une chaîne par exemple. "+1130":

function pad(number, length){
    var str = "" + number
    while (str.length < length) {
        str = '0'+str
    }
    return str
}

var offset = new Date().getTimezoneOffset()
offset = ((offset<0? '+':'-')+ // Note the reversed sign!
          pad(parseInt(Math.abs(offset/60)), 2)+
          pad(Math.abs(offset%60), 2))

66
2018-02-25 07:17



Vous pouvez utiliser:

moment-fuseau horaire

<script src="moment.js"></script>
<script src="moment-timezone-with-data.js"></script>

// retrieve timezone by name (i.e. "America/Chicago")
moment.tz.guess();

La détection du fuseau horaire du navigateur est plutôt difficile à obtenir, car il y a peu d'informations fournies par le navigateur.

Moment Timezone utilise Date.getTimezoneOffset() et Date.toString() sur une poignée de moments autour de l'année en cours pour recueillir autant d'informations sur l'environnement du navigateur que possible. Il compare ensuite ces informations à 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é.

console.log(moment.tz.guess()); // America/Chicago

44
2017-11-05 06:09



J'ai écrit une fonction dans mon projet, qui retourne le fuseau horaire hh:mm format. J'espère que cela peut aider quelqu'un:

function getTimeZone() {
    var offset = new Date().getTimezoneOffset(), o = Math.abs(offset);
    return (offset < 0 ? "+" : "-") + ("00" + Math.floor(o / 60)).slice(-2) + ":" + ("00" + (o % 60)).slice(-2);
}

// Outputs: +5:00

function getTimeZone() {
  var offset = new Date().getTimezoneOffset(), o = Math.abs(offset);
  return (offset < 0 ? "+" : "-") + ("00" + Math.floor(o / 60)).slice(-2) + ":" + ("00" + (o % 60)).slice(-2);
}


// See output
document.write(getTimeZone());

Violon de travail


30
2018-05-21 14:55



essayer getTimezoneOffset() du Date objet:

var curdate = new Date()
var offset = curdate.getTimezoneOffset()

Cette méthode renvoie le décalage du fuseau horaire en minutes, ce qui correspond à la différence entre l'heure GMT et l'heure locale en minutes.


12
2017-07-07 09:51



JavaScript:

var d = new Date();
var n = d.getTimezoneOffset();
var timezone = n / -60;
console.log(timezone);


8
2018-06-14 20:14



Avec moment.js:

moment().format('zz');

6
2017-07-11 10:30



Avec , vous pouvez trouver le fuseau horaire actuel comme

console.log(moment().utcOffset()); // (-240, -120, -60, 0, 60, 120, 240, etc.)
<script src="https://cdn.jsdelivr.net/momentjs/2.13.0/moment.min.js"></script>

Il retourne utc offset en quelques minutes.

Plus d'informations


3
2017-07-13 18:02