Wie kann ich den Zeitzonennamen in JavaScript erhalten?


115

Ich weiß, wie man den Zeitzonenversatz erhält, aber was ich brauche, ist die Fähigkeit, etwas wie "Amerika / New York" zu erkennen. Ist das überhaupt mit JavaScript möglich oder muss ich das basierend auf dem Offset zu Gast haben?


2
Hier ist eine Funktion, die Jon Nylander geschrieben hat, vielleicht hilft sie bitbucket.org/pellepim/jstimezonedetect
yunzen

Hier ist eine verwandte Antwort, die helfen könnte: stackoverflow.com/a/19421672/1447034
Douglas

Mögliches Duplikat der Abkürzung Detect
timezone

Antworten:


238

Die Internationalisierung API unterstützt immer die Benutzerzeitzone, und wird unterstützt in allen gängigen Browsern.

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

Beachten Sie, dass bei einigen älteren Browserversionen, die die Internationalisierungs-API unterstützen, die timeZoneEigenschaft auf undefineddie Zeitzonenzeichenfolge des Benutzers festgelegt ist. Soweit ich das beurteilen kann, geben zum Zeitpunkt des Schreibens (Juli 2017) alle aktuellen Browser mit Ausnahme von IE11 die Benutzerzeitzone als Zeichenfolge zurück.


6
Ich hätte nie gedacht, dass es so einfach ist
Mohammed Shareef C

5
Super, das erste, das ich gesehen habe und das keinen Moment nutzt! Danke
r0bb077

3
Tolle Lösung. Wollte nicht das ganze Moment Zeitzonen-Plugin dafür einschließen.
Joan Gil

1
sehr einfache und schöne Lösung!
Blackiii

2
@ DanielCompton Oh, ich wusste nichts über diese Tabelle, danke, dass du sie erneut korrigiert hast.
CommonSenseCode

9

Die am besten bewertete Antwort ist wahrscheinlich der beste Weg, um die Zeitzone zu erhalten. Der Intl.DateTimeFormat().resolvedOptions().timeZoneName der IANA-Zeitzone wird jedoch per Definition in englischer Sprache zurückgegeben.

Wenn Sie den Namen der Zeitzone in der Sprache des aktuellen Benutzers möchten, können Sie ihn wie folgt aus Dateder Zeichenfolgendarstellung analysieren :

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());

Getestet in Chrome und Firefox.

Natürlich funktioniert dies in einigen Umgebungen nicht wie vorgesehen. Beispielsweise gibt node.js GMT+07:00anstelle eines Namens einen GMT-Offset (z. B. ) zurück. Aber ich denke, es ist immer noch als Fallback lesbar.

PS Funktioniert nicht in IE11, genau wie die Intl...Lösung.



3

Zeitzone mit Namen abrufen (dh "Amerika / New York")

moment.tz.guess();

9
Bitte erwähnen Sie, dass es auch einfach ohne Abhängigkeiten möglich ist:Intl.DateTimeFormat().resolvedOptions().timeZone
user2923322

1
Ja, obwohl moment-js auch TZ für "Browser" errät, die diese Funktion nicht unterstützen. :)
Ferran Maylinch

in IE11 Intl.DateTimeFormat().resolvedOptions().timeZonegibt zurück undefined, gibt aber den moment.tz.guess()korrekten Wert zurück
Antoni4


0

Dadurch wird der Zeitzonencode (z. B. GMT) in älterem Javascript abgerufen (ich verwende ein Google App-Skript mit alter Engine):

function getTimezoneName() {
  return new Date().toString().get(/\((.+)\)/);
}

Ich stelle das hier nur für den Fall, dass jemand es braucht.


1
Ich denke das funktioniert nur für UTC/ GMT. Es sieht so aus, als wären andere buchstabiert; zB , Pacific Daylight Time.
Ian Dunn

-1

Versuchen Sie diesen Code von hier aus

<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>

-5

In Javascript gibt die Date.getTimezoneOffset () -Methode den Zeitzonenversatz von UTC in Minuten für das aktuelle Gebietsschema zurück.

var x = new Date();
var currentTimeZoneOffsetInHours = x.getTimezoneOffset() / 60;

Moment'timezone wird ein nützliches Werkzeug sein. http://momentjs.com/timezone/

Daten zwischen Zeitzonen konvertieren

var newYork    = moment.tz("2014-06-01 12:00", "America/New_York");
var losAngeles = newYork.clone().tz("America/Los_Angeles");
var london     = newYork.clone().tz("Europe/London");

newYork.format();    // 2014-06-01T12:00:00-04:00
losAngeles.format(); // 2014-06-01T09:00:00-07:00
london.format();     // 2014-06-01T17:00:00+01:00

4
Du hast die Warteschlange nicht verstanden.
srsajid

3
Ihre Codebeispiele beziehen sich nicht auf die ursprüngliche Frage. Wie würden Sie diese Bibliothek verwenden, um den Namen der aktuellen Zeitzone des Benutzers zurückzugeben?
Joe White
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.