2012-04-04 15 views
15

Sto usando moments.js per lavorare con le date in javascript. Tutte le date sono in UTC (o dovrebbero essere).Moment.js diff tra le date UTC

ho il giorno successivo (60 minuti dal termine corrente):

//Wed, 04 Apr 2012 21:09:16 GMT 
to = moment.utc().add('m', 60).toDate(); 

Ora voglio ottenere la differenza in secondi tra questa data e il datetime UTC corrente, in modo da fare:

seconds = moment.utc().diff(to, 'seconds'); 

Questo restituisce 10800 anziché 3600, quindi 3 ore, anziché 1.

Qualche idea su cosa sto facendo male?

Grazie!

EDIT:

ho aggiornato la linea di seconds = moment().diff(to, 'seconds'); e ottiene i secondi Currect, ma è -3600 invece di positivo.

EDIT:

Ora ho questi due oggetti momento:

{ _d: Thu, 05 Apr 2012 17:33:18 GMT, _isUTC: true } 
{ _d: Thu, 05 Apr 2012 16:38:45 GMT, _isUTC: true } 

D1 e D2.

Quando faccio d1.diff(d2, 'hours', true); restituisce 4. È sicuramente qualcosa a che fare con l'UTC, penso, ma sembra che questo dovrebbe funzionare.

risposta

0

Potrebbero essere i fusi orari a iniziare perché si utilizza toDate(). Prova a lavorare direttamente con il momento (ad esempio, modificalo in to = moment.utc().add('m', 60);).

+0

Hm, che 'a' è davvero un valore proveniente dal database, che è stato creato utilizzando il codice sopra, quindi devo usare toDate() per ottenere la stringa da memorizzare. – dzm

+0

@Super Ho modificato il post. Lavorare con oggetti momento che sono UTC, ottenendo problemi simili. – dzm

16

Questo è un bug legittimo. Ho appena archiviato qui: https://github.com/timrwood/moment/issues/261

Per aggirare, utilizzare il seguente invece.

var a = moment.utc().add('m', 60).toDate(), 
    b = moment().diff(to, 'seconds'); // use moment() instead of moment.utc() 

Inoltre, se avete bisogno di ottenere il toString della data, è possibile utilizzare moment().toString() come proxy per la avvolto Date().toString()

+7

Solo per FYI, questo è stato risolto nella versione 1.6.0. – timrwood

+0

Il bug esiste ancora quando si ha a che fare con l'ora legale. Esempio: differenza tra i giorni 15/10/2017 e 22/10/2017 (UTC). Il primo appuntamento non è nell'orario estivo brasiliano, ma il secondo è. La correzione che hai suggerito in precedenza ha funzionato. – Joaobrunoah