提前一小时(特别是在.endOf('day')的情况下)对momentjs ._d属性进行编码的逻辑背后?

时间:2018-12-27 23:18:28

标签: javascript time momentjs

在编写Rounding time duration of difference to end of day to whole hours in momentjs?时,我在Firefox控制台中运行了一些命令,但我注意到了这一点:当我指定“天真”日期且没有任何时区时,最终日期记录在._d中目前的属性是提前一小时:

var m1 = moment('2017-02-17 21:00:00');
<- undefined

m1
<- Object { _isAMomentObject: true, _i: "2017-02-17 21:00:00", \
_f: "YYYY-MM-DD HH:mm:ss", _isUTC: false, _pf: Object, _locale: Object, _a: Array[7], \
_d: Date 2017-02-17T20:00:00.000Z, \
_isValid: true, _z: null }

因此,我请求'2017-02-17 21:00:00',我在2017-02-17T20:00:00.000Z属性中记录了._d。现在,我在CET上,它是UTC + 0100,所以我想知道moment.js会假设我输入“天真”时输入本地日期时间,并将其存储在._d中时将其转换为UTC。

好的,我猜是这样,但是让我感到困惑的是在“ endOf('day')”的上下文中:

var m2 = moment(m1).endOf('day');
<- undefined

m2
<- Object { _isAMomentObject: true, _i: "2017-02-17 21:00:00", \
_f: "YYYY-MM-DD HH:mm:ss", _isUTC: false, _pf: Object, _locale: Object, _z: null, _a: Array[7], \
_d: Date 2017-02-17T22:59:59.999Z, \
_isValid: true }

因此,我要求一天结束时间为“ 2017-02-17 21:00:00”,然后我得到2017-02-17T22:59:59.999Z,即时间部分为“ 22:59:59”,根本看不到一天结束了!!

然后,如果我忘记了这一点,那么我使用.endOf('day')的代码(例如,在链接文章中)将按预期工作。

有人能解释一下这是怎么工作的逻辑吗-即使22:59:59并不是一天的结束?

0 个答案:

没有答案