Подтвердить что ты не робот

Currentjs внутренний объект, что есть "_d" против "_i"

Я использую momentjs и манипулирую дату, используя момент. 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

Может ли кто-нибудь просветить меня?

4b9b3361

Ответ 1

Не обращай на это внимания. Вместо этого используйте различные выходные функции, такие как .format(). Смотрите руководство Moment.js по этой теме.

У внутренних элементов момента есть некоторые причуды из-за того, как работает объект Date. Все функции в общедоступном API принимают их во внимание, но вы, вероятно, не захотите разобраться с ними самостоятельно.

Просто чтобы быть полным, я уточню их назначение:

  • _i - вход, используемый при создании объекта moment. Это может быть строка, число, массив или объект Date.

    Однако, если передается другой moment объект, _i будет скопирован в эти моменты _i, и другие свойства также будут скопированы. _i никогда не будет moment объектом.

    _i также может быть неопределенным в случае создания текущего момента с помощью moment().

  • _d - это экземпляр объекта Date который поддерживает объект moment.

    Если вы находитесь в "локальном режиме", то _d будет иметь ту же локальную дату и время, что и объект, _d в общедоступном API. getTime времени, возвращаемые getTime или valueOf, также будут совпадать.

    Если вы находитесь в "режиме UTC", то _d прежнему будет иметь ту же дату и время UTC, что и момент, когда объект отображается в общедоступном API. Это может сбивать с толку, так как вам нужно взглянуть на getUTCDate и другие функции на основе UTC в _d, чтобы увидеть их соответствие. Отметки времени также будут совпадать и здесь.

    Если вы изменили смещение часового пояса с помощью utcOffset, zone или tz, то значение _d не может оставаться отдельным. Он также должен учитывать, определен ли _offset. Если это так, то временная метка, поддерживающая объект _d, должна сначала корректироваться на величину смещения. Вы можете увидеть это поведение в реализации метода valueOf здесь.

Это поведение для этих двух полей с текущей версии (2.10.6, как я пишу это). Однако есть и другие поля, и, поскольку это внутренние поля, вполне возможно, что поведение может измениться в будущей версии. В частности, см. Выпуск № 2616.

Ответ 2

В качестве дополнения к ответу @Matt:

Оформить этот результат с консоли хром:

date1 - момент действительного объекта:

Как вы можете видеть,._d и._i имеют разные значения. Поэтому вам лучше использовать функцию format() (как писал @Matt Johnson) в вашем исходном коде.