2013-08-26 13 views
13

Mam ten backend, który przesyła do mnie wstępnie sformatowany czas w określonej strefie czasowej, ale bez żadnych informacji dla danej strefy czasowej. Struny są jak: "2013-08-26 16:55:00".Jak utworzyć czas w określonej strefie czasowej za pomocą pliku moment.js

mogę utworzyć nową instancję moment.js z tym ciągu:

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

ale to tylko utworzy instancję we własnej strefy czasowej.

Moment.js ma wtyczkę, która może tworzyć wystąpienia obiektu w określonych strefach czasowych i działa świetnie, ale nie mogę powiedzieć, o której godzinie obiekt ma wskazywać.

Jeśli jestem w Nowym Jorku, a ja to zrobić:

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

czas wynikający będzie 13:55 zamiast 16:55, ale w LA.

Chcę utworzyć instancję, która powie 16:55, ale w LA.

Powodem Pytam, ponieważ chcę, aby to zrobić:

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"); 

Czy istnieje sposób to zrobić?

Odpowiedz

19

W większości przypadków, można po prostu to zrobić:

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

Jeśli wymagają wkładu innego niż ISO8601, a następnie określić ciąg formatu jako drugi parametr i strefę czasową jako trzeci:

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

a jeśli trzeba użyć trybu chwilę „ścisłe parsowania”, a następnie, że idzie w trzeci parametr, a strefa czasowa przenosi się do czwartej pozycji:

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

jak mogę to zrobić, jeśli wymaga określonego formatu i ścisła parsowanie być również stosowane? – Jan

+0

@ Jan - Zaktualizowano odpowiedź, aby wyjaśnić. Dzięki. –

+0

@MattJohnson jak to działa na przykład w "America/New_York"? Wygląda na to, że po prostu przechwytuje strefę czasową przeglądarki – anm

1

Jeśli chcesz obliczyć wszystko w określonej strefie czasowej chcesz ustawić domyślną strefę czasową korzystając

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

Na moim przypadku użytkowania (w node.js projektu) Ja po prostu ustawić to zaraz po wymagające modułów chwila tak:

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

Wszystkie połączenia z moment() następnie stworzy czas w otoczeniu „Ameryka/Los_Angeles”, która nie jest taka sama jak przy użyciu:

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

LUB

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

oba by utworzyć obiekt moment w czasie UTC (chyba, że ​​już zmienił domyślne), a następnie przekształcić go za Strefa czasowa w Los Angeles.

Running B lub C powyżej rentowności konsoli przeglądarka:

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

Zawiadomienie _D pokazuje 03 marca 16:00; Dzieje się tak dlatego, że obiekt momentu jest tworzony 4 marca o godzinie 00:00 czasu UTC, a następnie przekształcony w strefę czasową Pacyfiku, czyli o 8 godzin wstecz/poprzedniego dnia.

źródło: http://momentjs.com/timezone/docs/#/using-timezones/default-timezone/