objeto interno momentjs lo que es “_d” vs “_i”

Estoy usando momentos y manipulando una fecha usando moment.hour (xx) moment.minute (xx).

Cuando console.log en el momento en que veo que el objeto contiene un _d y _i: el _d contiene el momento cambiado correcto.hour () o moment.minute () cambia sin embargo el objeto _i contiene el original?

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 

¿Alguien podría iluminarme?

No prestes atención a esos. Utilice las diversas funciones de salida, como .format() lugar. Consulte la orientación de Moment.js sobre este tema .

El momento interno tiene algunos caprichos debido a cómo funciona el objeto Date . Todas las funciones de la API pública las tienen en cuenta, pero es probable que no quiera resolverlas usted mismo.

Sin embargo, para ser completo, me extenderé sobre su propósito:

  • _i es la entrada utilizada al crear el objeto de moment . Puede ser una cadena, un número, una matriz o un objeto Date .

    Sin embargo, si se pasa otro objeto de moment , el _i se copiará en esos momentos _i , y también se copiarán otras propiedades. _i nunca será un objeto de moment .

    _i también puede estar indefinido, en el caso de crear el momento actual con moment() .

  • _d es la instancia del objeto Date que respalda el objeto moment .

    Si está en “modo local”, entonces _d tendrá la misma fecha y hora local que el objeto de momento que exhiba con la API pública. Las marcas de tiempo devueltas por getTime o valueOf también coincidirán.

    Si se encuentra en el “modo UTC”, entonces _d seguirá teniendo la misma fecha y hora UTC que el objeto de momento exhibido con la API pública. Esto puede ser confuso, ya que necesitaría ver getUTCDate y otras funciones basadas en _d en _d para ver si coinciden. Las marcas de tiempo también coincidirán aquí.

    Si ha cambiado la compensación de zona horaria, con las utcOffset , zone o tz , entonces el valor _d no puede ser independiente . También debe considerar si se define _offset . Si lo es, entonces la marca de tiempo que respalda el objeto _d primero debe ajustarse por la cantidad del desplazamiento. Puede ver este comportamiento en la implementación del método valueOf aquí .

Este es el comportamiento de estos dos campos a partir de la versión actual (2.10.6 mientras escribo esto). Sin embargo, hay otros campos también, y dado que estos son campos internos , es completamente posible que el comportamiento pueda cambiar en una versión futura. En particular, vea el número 2616 .

Como complemento a la respuesta de @ Matt:

Verifique este resultado desde la consola de Chrome:

date1 es el objeto válido de un momento:

Como puede ver, ._d y ._i tienen valores diferentes. Así que será mejor que use la función format () (como @Matt Johnson escribió) dentro de su código fuente.