使用本地时间时,startOf('day')/endOf('day') 函数按预期工作,但是当我使用 UTC 时间时,该值被视为本地时间。
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(西欧标准时间)-> 不正常
最好的祝福,
比约恩
这是什么版本的 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"
我希望这会有所帮助。
最有用的评论
听起来您在问为什么
m.utc().endOf('day')
以 UTC 而不是您的本地时间为您提供一天的结束。 这是设计使然。utc()
的意思是“像对待 UTC 一样对待时间”,一天的结束时间是 23:59:59 _in UTC_,在西欧是一个小时后。 这与offset()
的工作方式相同; 一旦时刻处于某个 UTC 偏移量,它的操作就会在该上下文中工作。换句话说,这些说的是非常不同的事情(我在美国东海岸):
我希望这会有所帮助。