2012-04-04 19 views
15

Estoy usando moments.js para trabajar con las fechas en javascript. Todas las fechas están en UTC (o deberían ser).Moment.js diff entre las fechas UTC

tengo la siguiente fecha (60 minutos de la hora actual):

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

Ahora quiero conseguir la diferencia en segundos entre esta fecha y la fecha y hora UTC actual, por lo que:

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

Esto devuelve 10800 en lugar de 3600, por lo que 3 horas, en lugar de una.

¿Alguna idea de lo que estoy haciendo mal?

¡Gracias!

EDIT:

que actualiza la línea de seconds = moment().diff(to, 'seconds'); y que llega a los segundos currect, pero es -3600 en lugar de positivo.

EDIT:

ahora tengo objetos de estos dos momentos:

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

D1 y D2.

Cuando hago d1.diff(d2, 'hours', true); esto devuelve 4. Definitivamente es algo relacionado con UTC, creo, pero parece que este debería funcionar en.

Respuesta

0

Podrían ser zonas horarias que se activan porque está utilizando toDate(). Intente simplemente trabajar directamente con el momento (es decir, cámbielo a to = moment.utc().add('m', 60);).

+0

Hm, que 'a' es realmente un valor procedente de la base de datos, que fue creado usando el código anterior, entonces tengo que usar toDate() para obtener la cadena para almacenar. – dzm

+0

@Super Edité la publicación. Trabajando con objetos de momento que son UTC, obteniendo problemas similares. – dzm

16

Esto es un error legítimo. Acabo de archivarlo aquí: https://github.com/timrwood/moment/issues/261

Para evitarlo, utilice lo siguiente en su lugar.

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

Además, si usted necesita para obtener el toString de la fecha, puede utilizar moment().toString() ya que sustituye al envueltos Date().toString()

+7

Solo para tu información, esto se corrigió en la versión 1.6.0. – timrwood

+0

El error persiste cuando se trata del horario de verano. Ejemplo: diferencia en días entre 15/10/2017 y 22/10/2017 (UTC). La primera cita no es en el horario de verano brasileño, pero la segunda es. La solución que sugeriste más arriba hizo el truco. – Joaobrunoah

Cuestiones relacionadas