J'ai le code suivant :
var fomattedDate = moment(myDate).format("L");
Parfois, moment(myDate).format("L")
renvoie "Date invalide", je veux savoir s'il existe un moyen d'empêcher cela et de renvoyer une chaîne vide à la place.
Si votre objectif est de savoir si vous avez une date valide, utilisez isValid
de Moment:
var end_date_moment, end_date;
jsonNC.end_date = jsonNC.end_date.replace(" ", "T");
end_date_moment = moment(jsonNC.end_date);
end_date = end_date_moment.isValid() ? end_date_moment.format("L") : "";
... qui utilisera ""
pour la chaîne end_date
si la date n'est pas valide.
Il se passe deux choses très différentes ici.
Premier:
0000-00-00T00:00:00
est une date invalide. Il n'y a pas de mois avant janvier (qui est le mois # 1 dans ce format), ni un jour de mois avant le jour # 1. 0000-00-00
N'a donc aucun sens.
0000-01-01T00:00:00
Serait valide - et moment("0000-01-01T00:00:00").format("L")
renvoie heureusement "01/01/0000"
Pour cela.
Si vous utilisez une date valide (comme votre exemple 2015-01-01T00:00:00
), Le code est correct.
Seconde:
console.log(Object.prototype.toString.call(end_date));
Il retourne [chaîne d'objet] même avec une date valide, donc la condition if ne fonctionne pas dans mon cas.
Bien sûr, c'est le cas: format
renvoie une chaîne et vous utilisez format
pour obtenir end_date
.
Si vous voulez savoir si un objet MomentJS a une date non valide, vous pouvez vérifier comme ceci:
if (theMomentObject.isValid()) {
// It has as valid date
} else {
// It doesn't
}
Si vous voulez savoir si un objet Date
a une date invalide:
if (!isNaN(theDateObject)) {
// It has as valid date
} else {
// It doesn't
}
... parce que isNaN
contraindra la date à sa forme primitive, qui est le nombre de millisecondes sous-jacent depuis le 1er janvier 1970 00:00:00 GMT, et lorsqu'une date a une date "invalide", le nombre il contient est NaN
. Donc isNaN(theDateObject)
est vrai lorsque la date n'est pas valide.