2013-08-26 15 views
13

Ho questo back-end che mi invia un'ora pre formattata in un fuso orario impostato, ma senza alcuna informazione per il fuso orario specificato. Le stringhe sono come: "2013-08-26 16:55:00".Come creare l'ora in un fuso orario specifico con moment.js

posso creare una nuova istanza moment.js con questa stringa:

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

ma questo sarà solo creare un'istanza nel mio fuso orario.

Moment.js ha un plug-in che può creare istanze dell'oggetto in fusi orari specifici e funziona benissimo, ma non posso dire a che ora voglio che l'oggetto punti.

Se sono a New York e faccio questo:

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

il tempo risultante sarà 13:55 invece di 16:55, ma a Los Angeles.

Quello che voglio è creare un'istanza che dirà 16:55, ma a LA ora.

Il motivo che mi chiedo è perché voglio fare questo:

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

C'è un modo per farlo?

risposta

19

Nella maggior parte dei casi, si può semplicemente fare questo:

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

Se avete bisogno di ingresso diverso da ISO8601, quindi specificare la stringa di formato come secondo parametro, e il fuso orario come terzo:

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

e se hai bisogno di utilizzare la modalità "rigorosa analisi" del momento, poi che va nel terzo parametro, e il fuso orario si sposta alla quarta posizione:

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

come faccio io lo faccio, se un formato specifico e di un'analisi rigorosa deve essere utilizzato come bene? – Jan

+0

@ Jan - Aggiornata la risposta per spiegare. Grazie. –

+0

@MattJohnson come funziona questo lavoro per esempio per 'America/New_York'? sembra appena cattura il fuso orario del browser – anm

1

Se si desidera calcolare tutto in un fuso orario specifico che si desidera impostare il fuso orario predefinito utilizzando

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

Per il mio caso d'uso (in un progetto node.js) ho appena impostato subito dopo che richiedono i moduli momento in questo modo:

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

Tutte le chiamate alla moment() seguito creerà l'ora nell'impostazione "America/Los_Angeles", che non è lo stesso che utilizza:

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

O

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

entrambi i quali avrebbe creato l'oggetto momento nel tempo UTC (a meno che già cambiato il default), e quindi convertirlo in essere il Fuso orario di Los Angeles.

esecuzione B o C al di sopra dei rendimenti console del browser:

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

Avviso _d mostra 3 marzo 16:00; questo perché l'oggetto momento viene creato con 4 marzo alle 12:00 in ora UTC, quindi convertito in fuso orario Pacifico, ovvero 8 ore indietro/il giorno precedente.

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