web-dev-qa-db-fra.com

Vérifiez si la date est valide

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.

93
Ganesh

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é.

141
Ganesh

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.

91
schutta

Ici vous allez: Working Fidddle

$(function(){
  var dateFormat = 'DD-MM-YYYY';
  alert(moment(moment("2012-10-19").format(dateFormat),dateFormat,true).isValid());
});
15
gschambial

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

12
wakeupoj
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
1
Sande