Voici le scénario:
J'ai une date String
et un format de date différent. Ex.:
date: 2016-10-19
dateFormat: "JJ-MM-AAAA".
Je dois vérifier si cette date est une date valide.
J'ai essayé de suivre des choses
var d = moment("2016-10-19",dateFormat);
d.isValid()
renvoie false
à chaque fois. Moment.js n'analyse-t-il pas la date dans le format donné?
Ensuite, j'ai d'abord essayé de formater la date dans DD-MM-YYYY
puis de la transmettre à Moment.js:
var d = moment("2016-10-19").format(dateFormat);
var date = moment(d, dateFormat);
Maintenant, date.isValid()
me donne le résultat souhaité, mais ici, l'objet date Moment.js est créé deux fois. Comment puis-je éviter ça? Y a-t-il une meilleure solution?
FYI je ne suis pas autorisé à changer le dateFormat
.
A pu trouver la solution. Étant donné que la date que je reçois est au format ISO, seule la date à l'heure la validera, il n'est pas nécessaire de passer le dateFormat.
var date = moment("2016-10-19");
Et puis date.isValid()
donne le résultat souhaité.
var date = moment('2016-10-19', 'DD-MM-YYYY', true);
Vous devez ajouter un troisième argument lors de l'appel de moment
qui applique une analyse syntaxique stricte. Voici la partie pertinente de la documentation de moment http://momentjs.com/docs/#/parsing/string-format/ Il est presque à la fin de la section.
Ici vous allez: Working Fidddle
$(function(){
var dateFormat = 'DD-MM-YYYY';
alert(moment(moment("2012-10-19").format(dateFormat),dateFormat,true).isValid());
});
J'utilise moment avec nouvelle date pour traiter les cas de valeurs de données undefined
:
const date = moment(new Date("2016-10-19"));
à cause de: moment(undefined).isValid() == true
où comme le meilleur moyen: moment(new Date(undefined)).isValid() == false
console.log(` moment('2019-09-01', 'YYYY-MM-DD').isValid()? ` +moment('2019-09-01', 'YYYY-MM-DD').isValid())
console.log(` moment('2019-22-01', 'YYYY-DD-MM').isValid()? ` +moment('2019-22-01', 'YYYY-DD-MM').isValid())
console.log(` moment('2019-22-22', 'YYYY-DD-MM').isValid()? ` +moment('2019-22-22', 'YYYY-DD-MM').isValid())
console.log(` moment('undefined', 'YYYY-DD-MM').isValid()? ` +moment('undefined', 'YYYY-DD-MM').isValid())
moment('2019-09-01', 'YYYY-MM-DD').isValid()? true
moment('2019-22-01', 'YYYY-DD-MM').isValid()? true
moment('2019-22-22', 'YYYY-DD-MM').isValid()? false
moment('undefined', 'YYYY-DD-MM').isValid()? false