Was ist der beste Weg, um die Zeitzone des Clients abzurufen und in eine andere Zeitzone zu konvertieren, wenn moment.js und moment-timezone.js verwendet werden
Ich möchte herausfinden, was die Zeitzone des Kunden ist, und später sein Datum und seine Uhrzeit in eine andere Zeitzone umwandeln.
Hat jemand Erfahrung damit?
javascript
momentjs
angular-moment
nemo_87
quelle
quelle
Antworten:
var timedifference = new Date().getTimezoneOffset();
Dies gibt die Differenz zwischen der Zeitzone des Clients und der UTC-Zeit zurück. Sie können dann damit herumspielen, wie Sie möchten.
quelle
Verwenden Sie bei Verwendung von moment.js:
var tz = moment.tz.guess();
Es wird eine IANA-Zeitzonen-ID zurückgegeben, z. B.
America/Los_Angeles
für die US-Pazifik-Zeitzone.Es ist hier dokumentiert .
Intern wird zunächst versucht, die Zeitzone mithilfe des folgenden Aufrufs vom Browser abzurufen:
Intl.DateTimeFormat().resolvedOptions().timeZone
Wenn Sie nur auf moderne Browser abzielen, die diese Funktion unterstützen, und für nichts anderes Moment-Timezone benötigen, können Sie dies einfach direkt aufrufen.
Wenn Moment-Timezone kein gültiges Ergebnis von dieser Funktion erhält oder wenn diese Funktion nicht vorhanden ist, "errät" sie die Zeitzone, indem mehrere verschiedene Daten und Zeiten gegen das
Date
Objekt getestet werden, um zu sehen, wie es sich verhält. Die Vermutung ist normalerweise eine ausreichend gute Annäherung, kann jedoch nicht garantiert genau mit der Zeitzoneneinstellung des Computers übereinstimmen.quelle
momet-timezone
Version 0.5.4 oder höher ... folgen Sie diesem Thread für weitere Erklärungen github.com/moment/moment-timezone/issues/324npm install moment-timezone
und benötigen Sie ihn dann wie folgtwindow.moment = require('moment-timezone');
Alle aktuellen Antworten liefern die Offsetdifferenz zum aktuellen Zeitpunkt, nicht zu einem bestimmten Datum.
moment(date).utcOffset()
Gibt den Zeitunterschied in Minuten zwischen der Browserzeit und UTC zum als Argument übergebenen Datum zurück (oder heute, wenn kein Datum übergeben wurde).Hier ist eine Funktion zum Analysieren des korrekten Versatzes zum ausgewählten Datum:
function getUtcOffset(date) { return moment(date) .subtract( moment(date).utcOffset(), 'minutes') .utc() }
quelle
utcOffset()
nichtoffsetUtc()
:)null
).Verwenden Sie die Moment- Bibliothek auf ihrer Website -> https://momentjs.com/timezone/docs/#/using-timezones/converting-to-zone/
Ich stelle fest, dass sie auch ihre eigene Bibliothek auf ihrer Website verwenden, sodass Sie die Browserkonsole vor der Installation ausprobieren können
moment().tz(String); The moment#tz mutator will change the time zone and update the offset. moment("2013-11-18").tz("America/Toronto").format('Z'); // -05:00 moment("2013-11-18").tz("Europe/Berlin").format('Z'); // +01:00 This information is used consistently in other operations, like calculating the start of the day. var m = moment.tz("2013-11-18 11:55", "America/Toronto"); m.format(); // 2013-11-18T11:55:00-05:00 m.startOf("day").format(); // 2013-11-18T00:00:00-05:00 m.tz("Europe/Berlin").format(); // 2013-11-18T06:00:00+01:00 m.startOf("day").format(); // 2013-11-18T00:00:00+01:00 Without an argument, moment#tz returns: the time zone name assigned to the moment instance or undefined if a time zone has not been set. var m = moment.tz("2013-11-18 11:55", "America/Toronto"); m.tz(); // America/Toronto var m = moment.tz("2013-11-18 11:55"); m.tz() === undefined; // true
quelle
Sie können Ihre gewünschte Zeit auch mit dem folgenden JS-Code ermitteln:
new Date(`${post.data.created_at} GMT+0200`)
In diesem Beispiel lagen meine empfangenen Daten in der Zeitzone GMT + 0200. Stattdessen kann es jede einzelne Zeitzone sein. Und die zurückgegebenen Daten sind das Datum in Ihrer Zeitzone. Ich hoffe, dies hilft jedem, Zeit zu sparen
quelle