web-dev-qa-db-fra.com

momentjs objet interne ce qui est "_d" vs "_i"

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?

47
Piotr Stulinski

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 valueOfici .

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 .

80
Matt Johnson-Pint

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.

3
RolandoCC