Ao usar a hora local, a função startOf('day')/endOf('day') funciona como esperado, mas quando eu uso a hora UTC o valor é tratado como a hora local.
momento.lang('nl');
var t1 = momento(); // horário local
var t2 = t1.clone().utc(); // UTC
console.log('LOC valueOf = ' + t1.valueOf()); //1390557395517 -> OK
console.log('UTC valueOf = ' + t2.valueOf()); // 1390557395517 -> OK
console.log('LOC final do dia valueOf = ' + t1.endOf('day').valueOf()); //1390604399999 -> OK
console.log('UTC final do dia valueOf = ' + t2.endOf('day').valueOf()); //1390607999999 -> NÃO OK
console.log('LOC fim do dia _d = ' + t1.endOf('dia')._d); //Sex, 24 de janeiro de 2014 23:59:59 GMT+0100 (Horário padrão da Europa Ocidental) -> OK
console.log('UTC final do dia _d = ' + t2.endOf('dia')._d); //Sáb 25 de janeiro de 2014 00:59:59 GMT+0100 (Horário padrão da Europa Ocidental) -> NÃO OK
Atenciosamente,
Björn
Que versão do Moment é essa? d
não é uma propriedade no objeto Moment (pelo menos, mais). Há um _d
, que você definitivamente não deve fazer referência e que seria extremamente enganoso aqui. Quanto ao problema real, funciona bem para mim:
moment().utc().endOf('day').format(); //=> '2014-01-24T23:59:59+00:00'
Então eu estou supondo que você está em uma versão pré-histórica?
Estou usando a versão 2.5.0.
A propriedade '_d' é o que eu uso para ver qual valor o Moment contém durante a depuração. (Desculpe pelo mal entendido). Mas por que essa propriedade é diferente para hora local versus UTC? Ambos têm fuso horário +0100 em vez de +0100 para hora local e +0000 para UTC. veja http://jsfiddle.net/3d9eU/5/
Hora local: sexta-feira, 24 de janeiro de 2014, 23:59:59 GMT+0100 (horário padrão da Europa Ocidental)
UTC: Sáb 25 de janeiro de 2014 00:59:59 GMT+0100 (W. Europe Standard Time) não deveria ser Sex Jan 24 2014 23:59:59 GMT+0100 (W. Europe Standard Time) com propriedade _isUTC = true ?
Parece que você está perguntando por que m.utc().endOf('day')
lhe dá o final do dia em UTC em vez de em seu horário local. Isso é por design. utc()
significa "trate a hora como se fosse UTC", onde o final do dia é 23:59:59 _em UTC_, que é uma hora mais tarde na Europa Ocidental. É o mesmo que offset()
funciona; uma vez que o momento está em um certo deslocamento UTC, suas operações funcionam nesse contexto.
Em outras palavras, eles dizem coisas muito diferentes (estou na costa leste dos EUA):
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 isso ajude.
Comentários muito úteis
Parece que você está perguntando por que
m.utc().endOf('day')
lhe dá o final do dia em UTC em vez de em seu horário local. Isso é por design.utc()
significa "trate a hora como se fosse UTC", onde o final do dia é 23:59:59 _em UTC_, que é uma hora mais tarde na Europa Ocidental. É o mesmo queoffset()
funciona; uma vez que o momento está em um certo deslocamento UTC, suas operações funcionam nesse contexto.Em outras palavras, eles dizem coisas muito diferentes (estou na costa leste dos EUA):
Espero que isso ajude.