momentjs内部对象是什么_d";vs"_我";

momentjs内部对象是什么_d";vs"_我";,momentjs,Momentjs,我使用momentjs并使用moment.hour(xx)moment.minute(xx)操纵日期 当我在console.log中看到对象包含_d和_i时: _d包含正确的已更改时刻。hour()或moment.minute()会更改,但是_i对象包含原始的 k {_isAMomentObject: true, _i: Thu Dec 11 2014 20:34:00 GMT+0200 (South Africa Standard Time), _isUTC: false, _pf: Obje

我使用momentjs并使用moment.hour(xx)moment.minute(xx)操纵日期

当我在console.log中看到对象包含_d和_i时: _d包含正确的已更改时刻。hour()或moment.minute()会更改,但是_i对象包含原始的

k {_isAMomentObject: true, _i: Thu Dec 11 2014 20:34:00 GMT+0200 (South Africa Standard Time), _isUTC: false, _pf: Object, _locale: j…}
_d: Thu Dec 11 2014 14:00:00 GMT+0200
_i: Thu Dec 11 2014 20:34:00 GMT+0200

有谁能启发我吗?

别理那些。使用各种输出函数,例如
.format()
。简言之,所有以下划线(
\uu
)为前缀的字段都应视为禁止输入

由于
日期
对象的工作方式,力矩内部有一些怪癖。公共API中的所有函数都考虑了它们,但您可能不想自己去弄清楚它们

但为了完整起见,我将详细说明其目的:

  • \u i
    是创建
    时刻
    对象时使用的输入。它可以是字符串、数字、数组或
    Date
    对象

    但是,如果传入另一个
    时刻
    对象,则将
    \u i
    复制到该时刻,并复制其他属性<代码>\u i永远不会是一个
    时刻
    对象

    如果使用
    力矩()
    创建当前力矩,也可以不定义
    \u i

  • \u d
    是支持
    时刻
    对象的
    日期
    对象的实例

    如果您处于“本地模式”,则
    \u d
    的本地日期和时间将与对象在公共API中显示的时刻相同。
    getTime
    valueOf
    返回的时间戳也将匹配

    如果您处于“UTC模式”,则
    \u d
    仍将具有与对象使用公共API显示的时刻相同的UTC日期和时间。这可能会令人困惑,因为您需要查看
    getUTCDate
    \u d
    上的其他基于UTC的函数,以查看它们是否匹配。时间戳在这里仍然匹配

    如果使用
    utcOffset
    zone
    tz
    功能更改了时区偏移,则
    \u d
    值不能单独存在。还必须考虑是否定义了<代码>偏移OS/COD>。如果是,则支持
    \u d
    对象的时间戳必须首先根据偏移量进行调整。您可以在
    valueOf
    方法的实现中看到这种行为

    此外,如果在应用不同的偏移量或时区时查看
    \u d
    的字符串输出,则会显示
    \u d
    正在使用本地时区。然而,转换到本地时间只是
    Date
    对象的
    toString
    函数的副作用。力矩不用于产生其功能


这是这两个字段在当前版本(我写这篇文章时是2.10.6)中的行为。但是,还有其他字段,因为这些字段是内部字段,所以在将来的版本中,行为完全可能会发生变化。具体请参见。

作为@Matt答案的补充:

从chrome的控制台签出此结果:

date1是一个时刻的有效对象:


如你所见,.\d和.\u我有不同的值。因此,您最好在源代码中使用format()函数(如@Matt Johnson所写)。

很高兴知道I是什么。我想我有一个问题,因为在我的应用程序中向前或向后几个月时,它没有改变。