Moment: startOf('day')/endOf('day') no es correcto con UTC

Creado en 24 ene. 2014  ·  3Comentarios  ·  Fuente: moment/moment

Cuando uso la hora local, la función startOf('day')/endOf('day') funciona como se esperaba, pero cuando uso la hora UTC, el valor se trata como la hora local.

http://jsfiddle.net/3d9eU/5/

momento.lang('nl');
var t1 = momento(); // hora local
var t2 = t1.clon().utc(); // UTC

console.log('LOC valueOf = ' + t1.valueOf()); //1390557395517 -> Aceptar
console.log('UTC valueOf = ' + t2.valueOf()); // 1390557395517 -> Aceptar

console.log('LOC al final del día valueOf = ' + t1.endOf('day').valueOf()); //1390604399999 -> Aceptar
console.log('UTC fin del día valueOf = ' + t2.endOf('day').valueOf()); //1390607999999 -> INCORRECTO

console.log('LOC final del día _d = ' + t1.endOf('día')._d); //Viernes 24 de enero de 2014 23:59:59 GMT+0100 (hora estándar de Europa occidental) -> OK
console.log('Fin del día UTC _d = ' + t2.endOf('día')._d); //Sáb 25 de enero de 2014 00:59:59 GMT+0100 (Hora estándar de Europa occidental) -> INCORRECTO

Atentamente,
Bjorn

Troubleshooting

Comentario más útil

Parece que está preguntando por qué m.utc().endOf('day') le da el final del día en UTC en lugar de en su hora local. Eso es por diseño. utc() significa "tratar la hora como si fuera UTC", donde el final del día es a las 23:59:59 _en UTC_, que es una hora más tarde en Europa occidental. Es igual a la forma en que funciona offset() ; una vez que el momento está en un cierto desplazamiento UTC, sus operaciones funcionan en ese contexto.

En otras palabras, estos dicen cosas muy diferentes (estoy en la costa este de EE. UU.):

moment().utc().endOf('day').toString(); //=> "Sat Jan 25 2014 23:59:59 GMT+0000"
moment().endOf('day').utc().toString(); //=> "Sun Jan 26 2014 04:59:59 GMT+0000"

Espero que eso ayude.

Todos 3 comentarios

¿Qué versión de Moment es esta? d no es una propiedad en el objeto Moment (al menos, ya). Hay un _d , al que definitivamente no debería hacer referencia y que sería muy engañoso aquí. En cuanto al problema real, funciona bien para mí:

moment().utc().endOf('day').format(); //=> '2014-01-24T23:59:59+00:00'

¿Supongo que estás en una versión prehistórica?

Estoy usando la versión 2.5.0.

La propiedad '_d' es lo que uso para ver qué valor contiene Moment durante la depuración. (Perdón por el malentendido). Pero, ¿por qué esta propiedad es diferente para la hora local frente a UTC? Ambos tienen la zona horaria +0100 en lugar de +0100 para la hora local y +0000 para UTC. ver http://jsfiddle.net/3d9eU/5/

Hora local: Vie 24 de enero de 2014 23:59:59 GMT+0100 (hora estándar de Europa occidental)
UTC: sábado 25 de enero de 2014 00:59:59 GMT+0100 (hora estándar de Europa Occidental) ¿no debería ser esto? viernes 24 de enero de 2014 23:59:59 GMT+0100 (hora estándar de Europa Occidental) con propiedad _isUTC = true ?

Parece que está preguntando por qué m.utc().endOf('day') le da el final del día en UTC en lugar de en su hora local. Eso es por diseño. utc() significa "tratar la hora como si fuera UTC", donde el final del día es a las 23:59:59 _en UTC_, que es una hora más tarde en Europa occidental. Es igual a la forma en que funciona offset() ; una vez que el momento está en un cierto desplazamiento UTC, sus operaciones funcionan en ese contexto.

En otras palabras, estos dicen cosas muy diferentes (estoy en la costa este de EE. UU.):

moment().utc().endOf('day').toString(); //=> "Sat Jan 25 2014 23:59:59 GMT+0000"
moment().endOf('day').utc().toString(); //=> "Sun Jan 26 2014 04:59:59 GMT+0000"

Espero que eso ayude.

¿Fue útil esta página
0 / 5 - 0 calificaciones