Gibt es eine zuverlässige Möglichkeit, eine Zeitzone vom Client-Browser abzurufen? Ich habe die folgenden Links gesehen, möchte aber eine robustere Lösung.
javascript
http
browser
timezone
Konfuzius
quelle
quelle
Antworten:
Schauen Sie sich diese Repository- Seite an, es ist hilfreich
Laden Sie jstz.min.js herunter und fügen Sie Ihrer HTML-Seite eine Funktion hinzu
und rufen Sie diese Funktion von Ihrem Display-Tag aus auf
quelle
Intl.DateTimeFormat().resolvedOptions().timeZone
(kein IE11) verwenden, wie von Wallace vorgeschlagen.Ein halbes Jahrzehnt später haben wir einen eingebauten Weg dafür! Für moderne Browser würde ich verwenden:
Dies gibt eine IANA-Zeitzonenzeichenfolge zurück, jedoch nicht den Offset . Weitere Informationen finden Sie in der MDN-Referenz .
Kompatibilitätstabelle - Stand März 2019: Funktioniert für 90% der weltweit verwendeten Browser. Funktioniert nicht mit Internet Explorer .
quelle
Intl.DateTimeFormat().resolvedOptions().timeZone
->undefined
Intl.DateTimeFormat().resolvedOptions().timeZone
wird den erwarteten Wert ab Firefox 52 zurückgeben: kangax.github.io/compat-table/esintl/…Wenn Menschen nach "Zeitzonen" suchen, reicht oft nur "UTC-Offset" aus. Ihr Server befindet sich beispielsweise in UTC + 5 und sie möchten wissen, dass ihr Client in UTC-8 ausgeführt wird .
In einfachem altem Javascript
(new Date()).getTimezoneOffset()/60
wird die aktuelle Anzahl der von UTC versetzten Stunden zurückgegeben.Es ist erwähnenswert, dass im Zeichen des
getTimezoneOffset()
Rückgabewerts (aus MDN-Dokumenten) ein mögliches "Gotcha" angegeben ist :Ich empfehle jedoch, die Datei day.js für zeit- / datumsbezogenen Javascript-Code zu verwenden. In diesem Fall können Sie einen nach ISO 8601 formatierten UTC-Offset erhalten, indem Sie Folgendes ausführen:
Es ist wahrscheinlich zu erwähnen, dass der Kunde diese Informationen leicht fälschen kann.
(Hinweis: Diese Antwort empfahl ursprünglich https://momentjs.com/ , aber dayjs ist eine modernere, kleinere Alternative.)
quelle
Im Moment ist die beste Wette wahrscheinlich jstz, wie in der Antwort von mbayloon vorgeschlagen .
Der Vollständigkeit halber sollte erwähnt werden, dass es einen Standard auf dem Weg gibt: Intl . Sie können dies bereits in Chrome sehen:
(Dies entspricht nicht dem Standard, was ein weiterer Grund ist, bei der Bibliothek zu bleiben.)
quelle
Intl
sollenundefined
für dietimeZone
Eigenschaft zurückgegeben werden, wenn Sie beim Erstellen der nicht manuell eine Zeitzone angegeben habenDateTimeFormat
. Chrome weicht vom Standard ab, indem stattdessen die Zeitzone des Systems zurückgegeben wird. Das ist es, was Johannes 'Antwort ausnutzt, aber auch, warum er sagte, "folgt nicht wirklich dem Standard".Sie können die Zeitzone verwenden, um die Zeitzone zu erraten:
quelle
Hier ist eine jsfiddle
Es enthält die Abkürzung für die aktuelle Benutzerzeitzone.
Hier ist das Codebeispiel
quelle
May 22 2015 03:45 PM CDT
ich es verwendet habeconsole.log(moment(now).format('MMM DD YYYY hh:mm A') + ' ' + moment.tz.zone(tz.name()).abbr(now.getTime()));
Ich habe einen ähnlichen Ansatz wie Josh Fraser verwendet , der den Browser-Zeitversatz von UTC bestimmt und feststellt, ob die Sommerzeit erkannt wird oder nicht (aber etwas vereinfacht aus seinem Code):
Beim Laden wird die
ClientTZ.getBrowserTZ()
Funktion ausgeführt, die Folgendes festlegt:ClientTZ.UTCoffset
zum Browser-Zeitversatz von UTC in Minuten (z. B. beträgt CST –360 Minuten, was –6,0 Stunden von UTC entspricht);ClientTZ.UTCoffsetT
auf den Versatz in der Form'±hhmmD'
(z. B.'-0600D'
), wobei das SuffixD
für DST undS
für Standard (Nicht-DST) steht;ClientTZ.hasDST
(zu wahr oder falsch).Das
ClientTZ.UTCoffset
wird in Minuten statt in Stunden angegeben, da einige Zeitzonen gebrochene stündliche Offsets haben (z. B. +0415).Die Absicht dahinter
ClientTZ.UTCoffsetT
ist, es als Schlüssel für eine Tabelle von Zeitzonen (hier nicht bereitgestellt) zu verwenden, z. B. für eine Dropdown-<select>
Liste.quelle
7-1
für Juli anstelle von Juni verwenden. Ich bin mir nicht sicher, ob es wirklich einen Unterschied macht, da ich bezweifle, dass es regionale Sommerzeitprogramme gibt, die den Juni nicht einschließen.Nein, es gibt keinen einzigen zuverlässigen Weg und es wird niemals einen geben. Haben Sie wirklich gedacht, Sie könnten dem Kunden vertrauen?
quelle