Moment: startOf('day')/endOf('day') 与 UTC 不正确

创建于 2014-01-24  ·  3评论  ·  资料来源: moment/moment

使用本地时间时,startOf('day')/endOf('day') 函数按预期工作,但是当我使用 UTC 时间时,该值被视为本地时间。

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

moment.lang('nl');
var t1 = 时刻(); // 当地时间
var t2 = t1.clone().utc(); // 世界标准时间

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

console.log('LOC 结束日 valueOf = ' + t1.endOf('day').valueOf()); //1390604399999 -> 好的
console.log('UTC 结束时间 valueOf = ' + t2.endOf('day').valueOf()); //1390607999999 -> 不行

console.log('LOC 一天结束 _d = ' + t1.endOf('day')._d); //2014 年 1 月 24 日星期五 23:59:59 GMT+0100(西欧标准时间)-> OK
console.log('UTC 结束时间 _d = ' + t2.endOf('day')._d); //2014 年 1 月 25 日星期六 00:59:59 GMT+0100(西欧标准时间)-> 不正常

最好的祝福,
比约恩

Troubleshooting

最有用的评论

听起来您在问为什么m.utc().endOf('day')以 UTC 而不是您的本地时间为您提供一天的结束。 这是设计使然。 utc()的意思是“像对待 UTC 一样对待时间”,一天的结束时间是 23:59:59 _in UTC_,在西欧是一个小时后。 这与offset()的工作方式相同; 一旦时刻处于某个 UTC 偏移量,它的操作就会在该上下文中工作。

换句话说,这些说的是非常不同的事情(我在美国东海岸):

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"

我希望这会有所帮助。

所有3条评论

这是什么版本的 Moment? d不是 Moment 对象的属性(至少,不再是)。 有一个_d ,你绝对不应该引用它,这在这里会产生很大的误导。 至于实际问题,它对我来说很好:

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

所以我猜你是在史前版本?

我使用的是 2.5.0 版。

属性“_d”是我用来查看 Moment 在调试过程中包含的值。 (很抱歉对于这个误会)。 但是为什么这个属性对于当地时间与 UTC 不同呢? 两者都有时区 +0100 而不是本地时间的 +0100 和 UTC 的 +0000。 见http://jsfiddle.net/3d9eU/5/

当地时间:2014 年 1 月 24 日星期五 23:59:59 GMT+0100(西欧标准时间)
UTC:2014 年 1 月 25 日星期六 00:59:59 GMT+0100(西欧标准时间)这不应该是 2014 年 1 月 24 日星期五 23:59:59 GMT+0100(西欧标准时间),属性 _isUTC = true ?

听起来您在问为什么m.utc().endOf('day')以 UTC 而不是您的本地时间为您提供一天的结束。 这是设计使然。 utc()的意思是“像对待 UTC 一样对待时间”,一天的结束时间是 23:59:59 _in UTC_,在西欧是一个小时后。 这与offset()的工作方式相同; 一旦时刻处于某个 UTC 偏移量,它的操作就会在该上下文中工作。

换句话说,这些说的是非常不同的事情(我在美国东海岸):

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"

我希望这会有所帮助。

此页面是否有帮助?
0 / 5 - 0 等级

相关问题

vbullinger picture vbullinger  ·  3评论

tanepiper picture tanepiper  ·  3评论

dbshwang picture dbshwang  ·  3评论

Shoroh picture Shoroh  ·  3评论

alvarotrigo picture alvarotrigo  ·  3评论