J'utilise momentjs et je manipule une date en utilisant moment.hour (xx) moment.minute (xx).
Lorsque je console.log au moment où je vois que l'objet contient un _d et _i: le _d contient les changements moment.hour () ou moment.minute () modifiés, mais l'objet _i contient l'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
Quelqu'un pourrait-il m'éclairer?
Ne faites pas attention à ceux-là. Utilisez à la place les différentes fonctions de sortie, telles que .format()
. Voir les conseils Moment.js sur ce sujet .
Le moment où les internes ont quelques bizarreries en raison du fonctionnement de l'objet Date
. Toutes les fonctions de l'API publique les prennent en compte, mais vous ne voulez probablement pas les découvrir vous-même.
Mais pour être complet, je développerai leur objectif:
_i
Est l'entrée utilisée lors de la création de l'objet moment
. Il peut s'agir d'une chaîne, d'un nombre, d'un tableau ou d'un objet Date
.
Cependant, si un autre objet moment
est passé, le _i
Sera copié à cet instant _i
, Et d'autres propriétés seront également copiées. _i
Ne sera jamais un objet moment
.
_i
Peut également être indéfini, dans le cas de la création de l'instant en cours avec moment()
.
_d
Est l'instance de l'objet Date
qui sauvegarde l'objet moment
.
Si vous êtes en "mode local", alors _d
Aura la même date et heure locale que l'instant où l'objet est exposé avec l'API publique. Les horodatages renvoyés par getTime
ou valueOf
correspondront également.
Si vous êtes en "mode UTC", alors _d
Aura toujours le même [~ # ~] utc [~ # ~] la date et l'heure au moment où l'objet est exposé avec l'API publique. Cela peut être déroutant, car vous devez regarder getUTCDate
et d'autres fonctions basées sur UTC sur _d
Afin de les voir correspondre. Les horodatages correspondront également ici.
Si vous avez modifié le décalage de fuseau horaire, avec les fonctions utcOffset
, zone
ou tz
, alors la valeur _d
ne peut pas être utilisé seul . Il doit également considérer si _offset
Est défini. Si c'est le cas, l'horodatage de l'objet _d
Doit d'abord être ajusté de la valeur du décalage. Vous pouvez voir ce comportement dans l'implémentation de la méthode valueOf
ici .
C'est le comportement de ces deux champs à partir de la version actuelle (2.10.6 au moment où j'écris ceci). Cependant, il existe également d'autres champs, et comme il s'agit de champs internes , il est tout à fait possible que le comportement puisse changer dans une future version. En particulier, voir problème # 2616 .
En complément de la réponse de @ Matt:
Découvrez ce résultat depuis la console du chrome:
date1 est l'objet valide d'un instant:
Comme vous pouvez le voir, ._d et ._i ont des valeurs différentes. Il vaut donc mieux utiliser la fonction format () (comme l'a écrit @Matt Johnson) dans votre code source.