2013-08-02 9 views
15

Ho un servizio Web che restituisce una data come la seguente stringa:Moment.js e Unix Epoch conversione

/Date(1377907200000)/

Io uso MomentJS per analizzare questo per un oggetto moment.

moment("/Date(1377907200000)/") =>Fri Aug 30 2013 20:00:00 GMT-0400

Tutto questo va bene. Ma quando chiamo unix() sull'oggetto mi viene dato il valore 1377907200. Questo, tuttavia, corrisponde a Fri Jan 16 1970 17:45:07 GMT-0500. Potrei semplicemente moltiplicare il valore restituito da unix() ma mi sembra sciatto. Sospetto che quello che sto facendo chiamando lo unix() non sia esattamente quello che penso sia. Devo specificare una sorta di formato quando chiami unix()? Cosa mi manca qui?

JSFidle showing the conversion to moment and then back.

+0

Non è necessario convertire l'oggetto data in quel modo, il momento può gestire il 'momento (1377907200000)' bene. Curioso perché il servizio web restituisce la data in quanto tale. – mix3d

+0

Usiamo anche un servizio web che lo restituisce-- questo perché il destinatario target dell'API è solitamente JavaScript, che fa "da Epoch in millisecondi" anziché secondi. È indirizzato al consumatore più probabile. –

risposta

48

La risposta fornita da meagar è corretta, da una prospettiva temporale rigorosamente JavaScript/Unix. Tuttavia, se si moltiplica per 1000, perderai qualsiasi precisione inferiore al secondo che potrebbe essere esistita nei tuoi dati.

Moment.js offre due metodi diversi, come descritto in the docs. .unix() restituisce il valore in secondi. Si sta effettivamente dividendo per 1000 e troncando qualsiasi decimale. Si desidera utilizzare il metodo .valueOf(), che restituisce solo i millisecondi senza modifiche.

+1

Grazie per i dettagli aggiuntivi. Almeno per questo articolo che non sarebbe necessario in quanto la granularità è solo per un giorno. –

+0

Oh, in realtà, vedo che dà esattamente quello che mi aspettavo. Preferirei non modificare il valore in alcun modo, quindi la tua risposta è ideale. –

+0

Mi dispiace, meagar .. –

10

In terra JavaScript, quando si converte un Date in un intero, si ottiene un numero di Milli secondi dall'epoca UNIX. Il tempo Unix tradizionale è il numero di secondi dall'epoca. Moltiplicare per 1000 è l'opzione corretta.

+0

Questo ha senso. Grazie per la spiegazione. –

+3

Oppure solo 'momento ("/Data (1377907200000)/"). ToDate(). GetTime()' –