2016-11-03 3 views
11

Was ist der beste Weg, Kundenzeitzone zu erhalten und es in eine andere Zeitzone zu konvertieren, wenn moment.js und Moment-timezone.js mitGet Zeitzone von Benutzer-Browser zur Zeit (Zeitzone) mit .js

möchte ich finden aus, was die Zeitzone des Clients ist, und konvertiert später Datum und Uhrzeit in eine andere Zeitzone.

Hat jemand Erfahrung damit?

Antwort

5

var timedifference = neu Date(). GetTimezoneOffset();

Dies gibt den Unterschied zwischen der Zeitzone des Clients und der UTC-Zeit zurück. Sie können dann damit spielen, wie Sie möchten.

+11

Dies gibt die * aktuelle * Zeitzone * offset * zurück. Nicht die Zeitzone. Der Offset kann sich beispielsweise aufgrund von Sommerzeit ändern. Siehe "Zeitzone! = Offset" in [dem Zeitzonen-Tag-Wiki] (http://stackoverflow.com/tags/timezone/info) –

+1

@ MattJohnsons Antwort ist die wahre Antwort auf diese Frage. Technisch ist diese Antwort falsch, da sie Offset-bezogen ist, nicht Zeitzonen-bezogen (unterschiedliche Konzepte). – dudewad

48

Wenn moment.js verwenden, verwenden:

var tz = moment.tz.guess(); 

Es wird eine IANA Zeitzone Kennung, wie America/Los_Angeles für die US-Pazifik-Zeitzone zurückzukehren.

Es ist documented here.

+0

Siehe auch [diese Antwort] (http://stackoverflow.com/a/16526897/634824) und [diese Antwort] (http://stackoverflow.com/a/18252251/634824). –

+1

Große Antwort - Upvoted! Bitte benutzen Sie auch 'momet-timezone' Version ** 0.5.4 ** oder höher ... bitte folgen Sie diesem Thread für weitere Erklärungen https://github.com/moment/moment-timezone/issues/324 – ymz

+0

+1. Stellen Sie sicher, dass Sie Moment mit Datum verwenden, um den tz-Haken zu nutzen. https://momentjs.com/timezone/docs/, um es mit node.js zu installieren, benutze diesen Befehl 'npm install moment-timezone' und verlangte danach 'window.moment = require (' moment-timezone ');' –

0

Hinweis moment(date).offsetUtc() die Zeitdifferenz in Minuten zwischen Browser Zeit und UTC am Tag als Argument bestanden zurückgibt. Ein sollte nicht diesen Unterschied global festgelegt und verwenden Sie es für alle Tage, wenn sie in einem Sommerzone sind:

// this is WRONG in daylight saving zones. don't do this! 
const OFFSET_UTC = moment().offsetUtc(); 

Die oben wird die aktuelle Differenz zu allen Terminen wenden Sie mit und wenn Sie arbeiten, sind in ein Sommerzeitzone Ihre Termine werden in der anderen Jahreshälfte um eine Stunde abweichen.

Eine kleine Funktion, die ich schrieb, die Zeitdifferenz in Sommer Zonen korrekt zu analysieren:

function toUtcMoment(date) { 
    return moment(date).add(moment(date).offsetUtc(), 'minutes').utc() 
} 

können Sie die oben verwenden, um richtig stammt aus dem Kalenderwerkzeug übergeben (die immer in Browser Zeitzone) sind in eine Anwendung, die verwendet UTC-Zeitzone.