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.
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
¿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.
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 funcionaoffset()
; 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.):
Espero que eso ayude.