时刻显示午夜,_i和_d属性不匹配



我在web应用程序中使用moment.js,遇到了一个错误,许多对象的时间在某个时刻更改为午夜。我仍在努力寻找是什么触发了这种变化,但从其中一个时刻来看,我注意到_I属性显示了原始/正确的时间。

以下是有问题的时刻之一mm 的开发人员控制台输出

_d: Thu Apr 02 2015 00:00:00 GMT-0400 (EDT)
_f: "YYYY-MM-DDTHH:mm:ssZ"
_i: "2015-04-02T12:10:43-04:00"
_isAMomentObject: true
_isUTC: false
_isValid: true
_locale: Locale
_pf: Object
_tzm: -240
mm.toISOString()
// "2015-04-02T04:00:00.000Z"
moment(mm._i).toISOString()
// "2015-04-02T16:10:43.000Z"

_i表示什么,为什么它与字符串输出不匹配?

原来这个错误是由两个错误的假设组合引起的,我有

  1. 呼叫startOf()的时刻发生了突变,我没有意识到
  2. 我使用的不可变数据结构忽略了具有自定义原型的对象,因此对象是可变的

结果是,应用程序的另一部分能够改变我所期望的不可变的时刻

不过,为了回答我的问题,我发现了以下

_i是最初创建瞬间对象时的输入,看起来不会更改

_dDate对象,表示任何突变后的日期值

mm = moment("2015-04-02T12:10:43-04:00")
mm._i // "2015-04-02T12:10:43-04:00"
mm._d // Thu Apr 02 2015 12:10:43 GMT-0400 (EDT)
mm.startOf('day')
mm._i // "2015-04-02T12:10:43-04:00"
mm._d // Thu Apr 02 2015 00:00:00 GMT-0400 (EDT)

最新更新