En utilisant Moment.js, je ne peux pas transformer un objet moment correct en un objet date avec des fuseaux horaires. Je ne peux pas obtenir la bonne date.
Exemple:
var oldDate = new Date(),
momentObj = moment(oldDate).tz("MST7MDT"),
newDate = momentObj.toDate();
console.log("start date " + oldDate)
console.log("Format from moment with offset " + momentObj.format())
console.log("Format from moment without offset " + momentObj.utc().format())
console.log("(Date object) Time with offset " + newDate)
console.log("(Date object) Time without offset "+ moment.utc(newDate).toDate())
javascript
momentjs
vadim.zhiltsov
la source
la source
Wednesday 24th 2019, 12:47:48 am
est-ce possible de convertir en2019-04-23T19:17:48.000Z
? @ vadim.zhiltsov.tz("MST7MDT")
. C'est pourquoi des bibliothèques comme moment.tz existent, pour compléter la capacité de base de l'objet Date intégré qui ne comprend que l'UTC et le fuseau horaire de l'hôte, c'est tout.Réponses:
Utilisez ceci pour transformer un objet moment en un objet date:
Depuis http://momentjs.com/docs/#/displaying/as-javascript-date/
Rendements:
la source
toDate
c'est en effet comment récupérer unDate
objet à partir d'unmoment
. Mais le code dans le corps de la question pose des questions sur la conversion de fuseau horaire - ce quiDate
ne peut pas le faire. À moins que l'heure de la montagne ne soit en effet le fuseau horaire de l'utilisateur, je ne sais pas comment cela a répondu à la question.moment("12/12/2011")
est l'endroit où vous obtiendriez ce message. Cela n'a rien à voir avec le fait d'aller du moment à ce jour objmoment().toDate()
Tant que vous avez initialisé le fuseau horaire avec les données des zones que vous souhaitez , votre code fonctionne comme prévu.
Vous convertissez correctement le moment en fuseau horaire, ce qui se reflète dans la deuxième ligne de sortie de
momentObj.format()
.Le passage à UTC ne fait pas que supprimer le décalage, il revient au fuseau horaire UTC. Si vous voulez faire cela, vous n'avez pas du tout besoin de l'
.tz()
appel d' origine . Tu pourrais juste fairemoment.utc()
.Peut-être que vous essayez simplement de changer la chaîne de format de sortie? Si c'est le cas, spécifiez simplement les paramètres que vous souhaitez pour la
format
méthode:En ce qui concerne les dernières lignes de votre code - lorsque vous revenez à un
Date
objet en utilisanttoDate()
, vous abandonnez le comportement de moment.js et revenez au comportement de JavaScript. UnDate
objet JavaScript sera toujours imprimé dans le fuseau horaire local de l'ordinateur sur lequel il s'exécute. Il n'y a rien de moment.js peut y faire.Quelques autres petites choses:
Bien que le constructeur puisse en prendre un
Date
, il est généralement préférable de ne pas en utiliser un. Pour "maintenant", ne l'utilisez pasmoment(new Date())
. Au lieu de cela, utilisez simplementmoment()
. Les deux fonctionneront mais c'est inutilement redondant. Si vous analysez à partir d'une chaîne, passez cette chaîne directement dans moment. N'essayez pas de l'analyser enDate
premier. Vous trouverez que l'analyseur du moment est beaucoup plus fiable.Les fuseaux horaires
MST7MDT
sont là pour des raisons de compatibilité descendante. Ils proviennent de fuseaux horaires de style POSIX, et seuls quelques-uns sont dans les données TZDB. Sauf si c'est absolument nécessaire, vous devez utiliser une clé telle queAmerica/Denver
.la source
.toDate()
. 2) N'utilisez pas de commentaires pour poser de nouvelles questions. C'est à cela que sert le gros bouton "Poser une question" ..toDate
n'a pas vraiment fonctionné pour moi, alors, voici ce que j'ai fait:J'espère que cela t'aides
la source
moment().add(1, 'd').toDate()
.Puisque momentjs n'a aucun contrôle sur l'objet de date javascript, j'ai trouvé un moyen de contourner cela.
Cela vous donnera un objet de date javascript avec l'heure convertie
la source
J'avais besoin d'avoir des informations de fuseau horaire dans ma chaîne de date. J'utilisais à l'origine
moment.tz(dateStr, 'America/New_York').toString();
mais j'ai ensuite commencé à obtenir des erreurs concernant la réintroduction de cette chaîne dans l'instant.J'ai essayé
moment.tz(dateStr, 'America/New_York').toDate();
mais j'ai perdu les informations de fuseau horaire dont j'avais besoin.La seule solution qui a renvoyé une chaîne de date utilisable avec un fuseau horaire pouvant être réinjecté dans l'instant était
moment.tz(dateStr, 'America/New_York').format();
la source
Agréable et propre!!!!
la source
Pour convertir n'importe quelle date, par exemple utc:
la source
moment().utc()
renvoie des valeurs pour UTC, puis.format( "YYYY-MM-DD HH:mm:ss" )
renvoie une chaîne qui a été définie sur UTC sans décalage de fuseau horaire et est donc analysée comme locale. Il ne correspond pas à un format de moment par défaut, il est donc analysé par l'analyseur intégré. Il ne correspond pas non plus aux formats pris en charge par ECMAScript, donc l'analyse dépend de l'implémentation. Quoi qu'il en soit, il est analysé comme local, de sorte que le décalage de fuseau horaire est appliqué à nouveau lors de la création de la valeur d'heure de la date.La question est un peu obscure. Je ferai de mon mieux pour expliquer cela. Vous devez d'abord comprendre comment utiliser le fuseau horaire . Selon cette réponse ici, TypeError: moment (). Tz n'est pas une fonction , vous devez importer le moment à partir du moment-fuseau horaire au lieu du moment par défaut (bien sûr, vous devrez d'abord npm installer le moment-fuseau horaire!). Par souci de clarté,
Maintenant, pour utiliser la fonction de fuseau horaire, utilisez moment.tz ("date_string / moment ()", "time_zone") (visitez https://momentjs.com/timezone/ pour plus de détails). Cette fonction renvoie un objet moment avec un fuseau horaire particulier. Par souci de clarté,
Maintenant, lorsque vous essayez de convertir newYork (l'objet moment) avec moment's toDate () (conversion au format ISO 8601), vous obtiendrez l'heure de Greenwich, au Royaume-Uni. Pour plus de détails, consultez cet article https://www.nhc.noaa.gov/aboututc.shtml , sur UTC. Cependant, si vous voulez juste votre heure locale dans ce format (heure de New York, selon cet exemple), ajoutez simplement la méthode .utc (true) , avec l' argument true , à votre objet moment. Par souci de clarté,
En bref, moment.tz considère le fuseau horaire que vous spécifiez et compare votre heure locale avec l'heure de Greenwich pour vous donner un résultat. J'espère que cela a été utile.
la source
moment a mis à jour le js lib à partir du 06/2018.
si vous avez la liberté d'utiliser Angular5 +, mieux vaut utiliser la fonction datePipe ici que la fonction de fuseau horaire ici. Je dois utiliser moment.js car mon projet se limite à Angular2 uniquement.
la source
essayez (sans
format
étape)Afficher l'extrait de code
la source
new Date(moment())
est équivalent ànew Date()
. Le fuseau horaire n'est défini que pour d .