2013-08-26 22 views
13

Ich habe dieses Back-End, das mir eine vorformatierte Zeit in einer festgelegten Zeitzone sendet, aber ohne Informationen für diese Zeitzone. Die Saiten sind wie: "2013-08-26 16:55:00".So erstellen Sie Zeit in einer bestimmten Zeitzone mit moment.js

Ich kann eine neue moment.js Instanz mit dieser Zeichenfolge erstellen:

var time = moment("2013-08-26 16:55:00") //this creates time in my tz 

aber dies wird nur eine Instanz in meiner eigenen Zeitzone erstellen.

Moment.js haben ein Plugin, das Instanzen des Objekts in bestimmten Zeitzonen erstellen kann und es funktioniert großartig, aber ich kann nicht sagen, auf welche Zeit ich das Objekt zeigen soll.

Wenn ich in New York bin, und ich tue dies:

var time = moment("2013-08-26 16:55:00").tz("America/Los_Angeles"); 

die resultierende Zeit 13.55 statt 16.55, aber in LA.

Was ich will, ist eine Instanz zu erstellen, die 16:55 sagen wird, aber in LA Zeit.

Der Grund, warum ich gefragt bin, weil ich dies tun will:

var now = moment.tz("America/Los_Angeles"); 
var end = moment("2013-08-26 16:55:00"); //plus something to convert LA time 

var timeLeft = end.diff(now, "minutes"); 

Gibt es eine Möglichkeit, das zu tun?

Antwort

19

In den meisten Fällen können Sie dies einfach tun:

moment.tz("2013-08-26 16:55:00", "America/Los_Angeles") 

Wenn Sie Eingabe erfordern andere als ISO8601, dann die Format-String als zweiten Parameter angeben, und die Zeitzone als die dritte:

moment.tz("8/26/2013 4:55 pm", "M/D/YYYY h:mm a", "America/Los_Angeles") 

und wenn Sie den Moment „strenges Parsing“ -Modus verwenden müssen, dann das geht in dem dritten Parameter, und die Zeitzone bewegt sich auf die vierte Position:

moment.tz("8/26/2013 4:55 pm", "M/D/YYYY h:mm a", true, "America/Los_Angeles") 
+0

wie kann ich es tun, wenn ein bestimmtes Format und eine strenge Analyse und werden muss, verwendet? – Jan

+0

@Jan - Aktualisiert die Antwort zu erklären. Vielen Dank. –

+0

@MattJohnson Wie sagt diese Arbeit für ex für 'Amerika/New_York'? scheint nur die Zeitzone des Browsers zu erfassen – anm

1

Wenn Sie alles in einer bestimmten Zeitzone berechnen möchten Sie die Standardzeitzone einstellen mit

A) moment.tz.setDefault("America/Los_Angeles");

Für meinen Anwendungsfall (in einem node.js Projekt) Ich habe gerade festgelegt es direkt nach dem Moment Module erfordern etwa so:

let moment = require('moment'); 
require('moment-timezone'); 
moment.tz.setDefault("America/Los_Angeles"); 

Alle Anrufe zu moment() wird danach die Zeit, in der „Amerika/Los_Angeles“ Einstellung erstellen, die nicht das gleiche wie die Verwendung ist:

B) moment.tz("2017-03-04 00:00", "America/Los_Angeles")

OR

C) moment("2017-03-04 00:00").tz("America/Los_Angeles")

beide den Moment Objekt in UTC-Zeit schaffen würde (es sei denn, Sie bereits die Standardeinstellung) geändert, und dann wandeln sie das sein Los Angeles Zeitzone.

B oder C oben in den Konsolen-Browser Ausbeuten Laufen:

_d: Fri Mar 03 2017 16:00:00 GMT-0800 (PST) 
_i: "2017-3-4 00:00" 

Hinweis _d zeigt 3. März 04.00; Dies liegt daran, dass das Momentobjekt mit 4. März um 12:00 Uhr in UTC-Zeit erstellt und dann in die pazifische Zeitzone konvertiert wird, was 8 Stunden hinter dem vorherigen Tag liegt.

Quelle: http://momentjs.com/timezone/docs/#/using-timezones/default-timezone/

Verwandte Themen