2013-10-16 14 views
5

sto utilizzando moment.js con i fusi orari per la modifica della data in una webapp. Sto memorizzando tutte le date in UTC e le restituisco all'IU come UTC. Sto avendo il fuso orario dell'utente. Voglio convertire l'ora UTC nel fuso orario degli utenti locali.Modifica della data Utc nella data locale utilizzando moment.js

var timezone = "America/New_York"; 
var utcDate = "2013-10-16T10:31:59.0537721Z"; 

var localDate = moment(utcDate).utc().tz(timezone).format() 

Quando provo a farlo, ho sbagliato tempo. non è sicuro come ottenere questo lavoro con momento

risposta

4

Si può provare:

moment.utc(utcDate).tz(timezone).format() 

Ma non dovrebbe importare. Dovrebbero entrambi produrre: "2013-10-16T06:31:59-04:00".

Funziona per me, è in esecuzione su Chrome 30, quindi è probabilmente correlato al browser.

Se stai utilizzando Moment.js 2.3.1 o precedente su IE8, si tratta di un effetto collaterale del numero #1175, che è stato corretto in 2.4.0. L'aggiornamento alla versione più recente dovrebbe risolvere il problema.

5

utilizza l'operatore + per ottenere il tempo unix, quindi:

moment(+moment.utc(utcDate)) 

Come funziona:

  • moment.utc(String) analizza la stringa e restituisce un oggetto momento impostato fuso orario UTC.
  • + restituisce l'unix compensato in millisecondi per il momento obejct
  • moment(Number) crea un nuovo oggetto momento nel fuso orario locale dell'utente, utilizzando il passato in UNIX di offset.
+1

ho upvoted questa risposta perché downvoting senza specificarne il motivo è inutile. –

4

per chiunque abbia lo stesso problema:

il formato iso data dovrebbe contenere il fuso orario. qui è il formato consentito dalla momentjs:

YYYY-MMM-DDTHH:mm:ss+00:00 

preavviso il +00: 00 significa che è GMT

esempio

moment('2014-10-03T09:31:18+00:00').format() 

sarà terturn

"2014-10-03T17:31:18+08:00" 
0

Anche se don Conoscendo il fuso orario, si ottiene l'offset del client e si utilizza in questo modo,

let utcTime = "2017-02-02 08:00:13.567"; 
var offset = moment().utcOffset(); 
var localText = moment.utc(utcTime).utcOffset(offset).format("L LT"); 

Prova questa JsFiddle