Wie kann ich die Zeitzoneninformationen des Besuchers erfassen? Ich brauche die Zeitzone sowie die GMT-Offsetstunden.
javascript
timezone
Árvíztűrő tükörfúrógép
quelle
quelle
Antworten:
Beachten Sie, dass nicht alle Zeitzonen um ganze Stunden versetzt sind: Neufundland ist beispielsweise UTC minus 3h 30m (ohne Sommerzeit).
quelle
getTimezoneOffset
Ungenauigkeit in Kraft? Der Artikel, auf den Sie sich beziehen, ist vom Juni 2007 und enthält keine Details darüber, wie die Funktion ungenau ist. TatsächlichjsTimezoneDetect
verwendetgetTimezoneOffset
sich die Bibliothek, auf die Sie hingewiesen haben, selbst.var hrs = -(new Date().getTimezoneOffset() / 60)
um in Stunden normalerweise versetzt zu werdentimezone
! =utc offset
Die Verwendung eines Versatzes zur Berechnung der Zeitzone ist ein falscher Ansatz, und Sie werden immer auf Probleme stoßen. Zeitzonen und Sommerzeitregeln können sich im Laufe eines Jahres mehrmals ändern, und es ist schwierig, mit den Änderungen Schritt zu halten.
Um die IANA-Zeitzone des Systems in JavaScript abzurufen , sollten Sie verwenden
Ab September 2019 funktioniert dies in 95% der weltweit verwendeten Browser .
Alte Kompatibilitätsinformationen
ecma-402 / 1.0 sagt, dass
timeZone
dies undefiniert sein kann, wenn es dem Konstruktor nicht zur Verfügung gestellt wird. Der zukünftige Entwurf (3.0) behebt dieses Problem jedoch, indem er zur Standardzeitzone des Systems wechselt.in ecma-402 / 3.0, das sich noch in einem Entwurf befindet, wurde es geändert
quelle
Mir ist klar, dass diese Antwort ein wenig vom Thema abweicht, aber ich stelle mir vor, dass viele von uns, die nach einer Antwort suchen, auch die Zeitzone für die Anzeige formatieren und möglicherweise auch die Zonenabkürzung erhalten möchten. Also los geht's ...
Wenn Sie möchten, dass die Client-Zeitzone gut formatiert ist, können Sie sich auf die JavaScript-Methode Date.toString verlassen und Folgendes tun:
Dies gibt Ihnen beispielsweise "GMT-0400 (EST)", einschließlich der Zeitzonenminuten, falls zutreffend.
Alternativ können Sie mit Regex jedes gewünschte Teil extrahieren:
Für "GMT-0400 (EDT)":
Für "GMT-0400":
Für nur "EDT":
Für nur "-0400":
Date.toString-Referenz: https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Date/toString
quelle
split[4] + " " + split[5]
?!split
enthält:["Mon", "Mar", "13", "2017", "14:05:22", "GMT-0400", "(Eastern", "Daylight", "Time)"]
so ist das ErgebnisDaylight Time)
new Date().toString()
hängt vollständig von Ihren Ländereinstellungen ab. Es ist eine sehr schlechte Idee, zu erwarten, dass die Ergebnisse anderer Kunden Ihren ähneln.Es wurde bereits beantwortet, wie man in Minuten als Ganzzahl versetzt wird, aber falls jemand den lokalen GMT-Versatz als Zeichenfolge haben möchte, z
"+1130"
.quelle
pad(parseInt(Math.abs(offset/60)), 2)
, um es richtig zu machen. Andernfalls erhalten Sie möglicherweise +5.530 wie in meinem Fall. Ich bin mir nicht sicher, ob Matheboden usw. hier besser ist oder nicht. Aber das hier atleast gibt mir +0530 wie erwartetSie können verwenden:
Moment-Zeitzone
Die Erkennung der Browser-Zeitzone ist ziemlich schwierig, da der Browser nur wenige Informationen bereitstellt.
Moment Timezone nutzt
Date.getTimezoneOffset()
undDate.toString()
in wenigen Momenten des laufenden Jahres, um so viele Informationen wie möglich über die Browserumgebung zu sammeln. Anschließend werden diese Informationen mit allen geladenen Zeitzonendaten verglichen und die engste Übereinstimmung zurückgegeben. Bei Verbindungen wird die Zeitzone mit der bevölkerungsreichsten Stadt zurückgegeben.quelle
Ich habe in meinem Projekt eine Funktion geschrieben, die die Zeitzone im
hh:mm
Format zurückgibt . Ich hoffe das kann jemandem helfen:Code-Snippet anzeigen
Geige arbeiten
quelle
Ein Einzeiler , der sowohl den Offset als auch die Zeitzone angibt , besteht darin, einfach toTimeString () für ein neues Date-Objekt aufzurufen . Von MDN:
Der Haken ist, dass die Zeitzone nicht im Standard-IANA-Format vorliegt. Es ist etwas benutzerfreundlicher als das IANA- Format "Kontinent / Stadt" . Versuch es:
In Kalifornien wird
toTimeString()
derzeit zurückgegeben,Pacific Daylight Time
während die Intl-API zurückgegeben wirdAmerica/Los_Angeles
. In Kolumbien würde man bekommenColombia Standard Time
, vs.America/Bogota
.Beachten Sie, dass viele andere Antworten auf diese Frage versuchen, dieselben Informationen durch Aufrufen von Date.toString () zu erhalten. Dieser Ansatz ist nicht so zuverlässig, wie MDN erklärt :
quelle
Versuch
getTimezoneOffset()
desDate
Objekts:Diese Methode gibt den Zeitzonenversatz in Minuten zurück, der die Differenz zwischen GMT und Ortszeit in Minuten darstellt.
quelle
JavaScript:
quelle
Mit moment.js :
quelle
z
undzz
sind ab 1.6.0 veraltet, siehe momentjs.com/docs/#/displaying/formatZ
undZZ
.zoneAbbr()
wurde ersetztz
undzz
. Siehe Dokumentation hierMit momentjsfinden Sie die aktuelle Zeitzone als
Mit dayjsfinden Sie die aktuelle Zeitzone als
Beide APIs geben den UTC-Offset in Minuten zurück.
quelle
getTimezoneOffset()
.Zeitzone in Stunden-
Wenn Sie genau sein möchten, wie Sie im Kommentar erwähnt haben, sollten Sie Folgendes versuchen:
quelle
Wenn Sie nur die Zeitzonenabkürzung "MST" oder "EST" benötigen:
quelle
Date.toString()
ist nicht zuverlässig, und MDN erklärt, warum. Ich habe den entsprechenden Abschnitt aus den Dokumenten in meine Antwort eingefügt .Sehen Sie, dieser resultierende Operator war der Zeitzone entgegengesetzt. Wenden Sie also eine mathematische Funktion an und validieren Sie die Zahl weniger oder mehr.
Siehe das MDN-Dokument
quelle
round
? Es sollte seinfloor
, nicht wahr?Beispiel: Do 21.06.2018 18:12:50 GMT + 0530 (India Standard Time)
O / P: +0530
quelle
Date.toString()
ist nicht zuverlässig, und MDN erklärt, warum. Ich habe den entsprechenden Abschnitt aus den Dokumenten in meine Antwort eingefügt .Versuche dies,
quelle
Dieser Wert stammt vom Computer des Benutzers und kann jederzeit geändert werden. Ich denke, das spielt keine Rolle. Ich möchte nur einen ungefähren Wert abrufen und ihn dann auf meinem Server in GMT konvertieren.
Zum Beispiel bin ich aus Taiwan und es gibt "+8" für mich zurück.
Arbeitsbeispiel
JS
HTML
Ergebnis
quelle
Auf der
new Date(
) können Sie den Offset erhalten, um den Zeitzonennamen zu erhalten, den Sie tun können:new Date().toString().replace(/(.*\((.*)\).*)/, '$2');
Sie erhalten den Wert zwischen
()
am Ende des Datums, dh dem Namen der Zeitzone.quelle
Date.toString()
ist nicht zuverlässig, und MDN erklärt, warum. Ich habe den entsprechenden Abschnitt aus den Dokumenten in meine Antwort eingefügt . Auch diese Antwort wurde bereits mindestens dreimal gegeben.Das wäre meine Lösung: