Je sais comment obtenir le décalage horaire, mais ce dont j'ai besoin, c'est de pouvoir détecter quelque chose comme "Amérique/New York". Est-ce même possible à partir de JavaScript ou est-ce quelque chose que je vais devoir inviter à évaluer sur la base du décalage?
API d'internationalisation prend en charge l'obtention du fuseau horaire de l'utilisateur et est pris en charge dans tous les navigateurs actuels.
console.log(Intl.DateTimeFormat().resolvedOptions().timeZone)
N'oubliez pas que sur certaines anciennes versions de navigateur prenant en charge l'API d'internationalisation, la propriété timeZone
est définie sur undefined
plutôt que sur la chaîne de fuseau horaire de l'utilisateur. Autant que je sache, au moment de la rédaction de cet article (juillet 2017) tous les navigateurs actuels, à l'exception de IE11 , renvoie le fuseau horaire de l'utilisateur sous forme de chaîne.
Vous pouvez utiliser ce script. http://pellepim.bitbucket.org/jstz/
Répertoire Fork ou clone ici. https://bitbucket.org/pellepim/jstimezonedetect
Une fois que vous avez inclus le script, vous pouvez obtenir la liste des fuseaux horaires dans - jstz.olson.timezones
variable.
Et le code suivant est utilisé pour déterminer le fuseau horaire du navigateur client.
var tz = jstz.determine();
tz.name();
Profitez de jstz!
Vous pouvez simplement écrire votre propre code en utilisant la table de correspondance ici: http://www.timeanddate.com/time/zones/
ou utilisez la bibliothèque moment-timezone: http://momentjs.com/timezone/docs/
Voir zone.name; // America/Los_Angeles
ou cette bibliothèque: https://github.com/Canop/tzdetect.js
La plupart des votants réponse est probablement le meilleur moyen d'obtenir le fuseau horaire. Cependant, Intl.DateTimeFormat().resolvedOptions().timeZone
renvoie le nom du fuseau horaire IANA par définition, qui est en anglais.
Si vous voulez que le nom du fuseau horaire soit dans la langue de l'utilisateur actuel, vous pouvez l'analyser à partir de la représentation sous forme de chaîne de Date
comme suit:
function getTimezoneName() {
const today = new Date();
const short = today.toLocaleDateString(undefined);
const full = today.toLocaleDateString(undefined, { timeZoneName: 'long' });
// Trying to remove date from the string in a locale-agnostic way
const shortIndex = full.indexOf(short);
if (shortIndex >= 0) {
const trimmed = full.substring(0, shortIndex) + full.substring(shortIndex + short.length);
// by this time `trimmed` should be the timezone's name with some punctuation -
// trim it from both sides
return trimmed.replace(/^[\s,.\-:;]+|[\s,.\-:;]+$/g, '');
} else {
// in some magic case when short representation of date is not present in the long one, just return the long one as a fallback, since it should contain the timezone's name
return full;
}
}
console.log(getTimezoneName());
Testé dans Chrome et Firefox.
Bien entendu, cela ne fonctionnera pas comme prévu dans certains environnements. Par exemple, node.js renvoie un décalage GMT (par exemple, GMT+07:00
) au lieu d'un nom. Mais je pense que c'est toujours lisible comme une solution de secours.
P.S. Ne fonctionnera pas dans IE11, comme le Intl...
Solution.
Essayez ce code référez-vous à partir de ici
<script type="text/javascript" src="//ajax.googleapis.com/ajax/libs/jquery/2.0.0/jquery.min.js">
</script>
<script type="text/javascript" src="//cdnjs.cloudflare.com/ajax/libs/jstimezonedetect/1.0.4/jstz.min.js">
</script>
<script type="text/javascript">
$(document).ready(function(){
var tz = jstz.determine(); // Determines the time zone of the browser client
var timezone = tz.name(); //'Asia/Kolhata' for Indian Time.
alert(timezone);
});
</script>