Moment.js ce jour n'est pas toujours retourner une instance de Date
En gros, j'ai besoin de calculer la date d'expiration d'une (très longue durée de vie) cookie, donc je veux faire maintenant + de 99 ans. Comme c'est plus facile lors de l'utilisation d'une bibliothèque comme Moment.js qu'avec JavaScript natif, je suis en train de faire:
var expirationDate = moment().add('years', 99);
Mais j'ai besoin d'un JavaScript Date
objet et l'appel de la toUTCString
fonction sur elle pour obtenir le correctement chaîne formatée pour le cookie. Donc je suis en train de faire:
var expirationDate = m().add('years', 99).toDate().toUTCString();
Maintenant, quelque chose de très étrange se passe. Quand je lance cette ligne dans un Node.js shell, tout va bien. Mais si je le lance à partir d'un script, il échoue. Le message d'erreur est
TypeError: Object Mon, 24 Oct 2112 07:34:34 GMT n'a pas de méthode 'toUTCString'
qui est correct, car le chose retourné par toDate
est pas une instance de Date
, mais juste un simple objet ancien. Curieusement, lorsque j'essaie la même chose dans le Node.js REPL, toDate
retourne une instance de Date
.
Je exécuter les deux, la RÉPLICATION et le script à l'aide Node.js 0.8.25, à la fois sur la même machine. Moment.js est la version 2.3.1.
Aucune idée de ce qui pourrait causer ce problème?
- Juste pour être sûr, est
m
un alias pourmoment
dans votre code ? Ou sont les parenthèses une erreur ? - Vous avez tellement raison!
m
était juste un alias pourmoment
, mais l'erreur vient de la ligne suivante, où j'ai remis l'objet créé à une fonction, qui a essayé d'appelertoUTCString
en interne. Par conséquent, il a échoué. Merci pour de me pointer dans la bonne direction :-)! - depuis que vous utilisez déjà momentjs, pourquoi ne pas simplement utiliser moment d'imprimer l'utc chaîne?
moment().add('years', 99).utc().format();
Vous devez vous connecter pour publier un commentaire.
Vous devez juste être capable de faire cela en une seule étape:
Mais je pense que le principal problème a été identifié par dystroy dans les commentaires.
avez-vous essayez quelque chose comme:
expirationDate = new Date(moment().add('years', 99));
?De cette façon, Vous obtiendrez une date insteance, j'ai essayé MomentJs de l' .jour (), mais il n'a pas de suite à mes besoins.