Question Moment.js se transforme en objet date


En utilisant Moment.js, je ne peux pas transformer un objet moment correct en objet date avec des fuseaux horaires. Je ne peux pas obtenir la date correcte.

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())

418
2017-08-01 07:25


origine


Réponses:


Utilisez ceci pour transformer un objet moment en un objet date:

De http://momentjs.com/docs/#/displaying/as-javascript-date/

moment().toDate();

Rendements:

Tue Nov 04 2014 14:04:01 GMT-0600 (CST)

781
2017-11-04 20:06



Tant que vous avez initialisé moment-fuseau horaire avec les données pour les zones que vous voulez, 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().

Passer en UTC ne fait pas que lâcher le décalage, il revient au fuseau horaire UTC. Si vous allez faire cela, vous n'avez pas besoin de l'original .tz() appeler du tout. Vous pourriez juste faire moment.utc().

Peut-être que vous essayez juste de changer la chaîne de format de sortie? Si oui, spécifiez simplement les paramètres que vous voulez format méthode:

momentObj.format("YYYY-MM-DD HH:mm:ss")

En ce qui concerne les dernières lignes de votre code - quand vous revenez à un Date objet utilisant toDate(), vous abandonnez le comportement de moment.js et revenez au comportement de JavaScript. Un JavaScript Date L'objet sera toujours imprimé dans le fuseau horaire local de l'ordinateur sur lequel il s'exécute. Il n'y a rien de moment. Je peux le faire.

Quelques autres petites choses:

  • Alors que le constructeur du moment pouvez prendre un Date, il est généralement préférable de ne pas en utiliser. Pour "maintenant", ne pas utiliser moment(new Date()). Au lieu de cela, utilisez simplement moment(). Les deux vont fonctionner mais c'est inutile. Si vous analysez à partir d'une chaîne, passez cette chaîne directement dans le moment. N'essayez pas de l'analyser à un Date premier. Vous trouverez l'analyseur de moments beaucoup plus fiable.

  • Fuseaux horaires comme MST7MDT sont là pour des raisons de compatibilité ascendante. Ils proviennent de fuseaux horaires de style POSIX, et seuls quelques-uns se trouvent dans les données TZDB. Sauf si absolument nécessaire, vous devez utiliser une clé telle que America/Denver.


35
2017-08-01 13:14



.toDate n'a pas vraiment fonctionné pour moi, alors voici ce que j'ai fait:

futureStartAtDate = new Date(moment().locale("en").add(1, 'd').format("MMM DD, YYYY HH:MM"))

J'espère que cela t'aides


17
2018-03-13 10:04



J'avais besoin d'avoir des informations sur le fuseau horaire dans ma chaîne de date. J'utilisais à l'origine moment.tz(dateStr, 'America/New_York').toString(); mais ensuite j'ai commencé à avoir des erreurs à propos de l'alimentation de cette chaîne dans le moment.

J'ai essayé le moment.tz(dateStr, 'America/New_York').toDate(); mais j'ai perdu les informations sur le fuseau horaire dont j'avais besoin.

La seule solution qui a retourné une chaîne de date utilisable avec fuseau horaire qui pourrait être réinjecté dans le moment était moment.tz(dateStr, 'America/New_York').format();


4
2018-03-19 04:35



moment a mis à jour le js lib à partir de 06/2018.

var newYork    = moment.tz("2014-06-01 12:00", "America/New_York");
var losAngeles = newYork.clone().tz("America/Los_Angeles");
var london     = newYork.clone().tz("Europe/London");

newYork.format();    // 2014-06-01T12:00:00-04:00
losAngeles.format(); // 2014-06-01T09:00:00-07:00
london.format();     // 2014-06-01T17:00:00+01:00

Si vous êtes libre d'utiliser Angular5 +, alors mieux vaut utiliser la fonction datePipe que la fonction fuseau horaire ici. Je dois utiliser moment.js parce que mon projet se limite à Angular2 seulement.


1
2018-06-13 16:12