Validation de la date de javascript non validation 31 février

J'essaie d'écrire un code pour valider les données du formulaire. J'ai un champ de date qui devrait avoir un mm/dd/yyyy . Je devais prendre des exceptions comme le 31 février , alors j'ai ajouté ce code:

 var d = new Date(dob); if (isNaN(d.getTime())) { //this if is to take care of February 31, BUT IT DOESN'T! error = 1; message += "<li>Invalid Date</li>"; } else { var date_regex = /^(0[1-9]|1[0-2])\/(0[1-9]|1\d|2\d|3[01])\/(19|20)\d{2}$/; var validFormat = date_regex.test(dob); if (!(validFormat)) { error = 1; message += "<li>Invalid date format - date must have format mm/dd/yyyy</li>"; } } 

Cependant, j'ai trouvé quelque chose de très étrange: alors que la date 02/32/2000 erreurs comme date invalide, le 02/31/2000 ne le fait pas!

En raison de ce que j'ai dit dans les commentaires …

Une autre façon de vérifier si une date est valide est de vérifier si les choses que vous avez passées dans la new Date fonction new Date sont identiques à celles qui en découlent, comme ceci:

 // Remember that the month is 0-based so February is actually 1... function isValidDate(year, month, day) { var d = new Date(year, month, day); if (d.getFullYear() == year && d.getMonth() == month && d.getDate() == day) { return true; } return false; } 

Alors vous pourriez faire ceci:

 if (isValidDate(2013,1,31)) 

Et il renverrait true si valide et false s'il est invalide.

La façon habituelle de valider une chaîne de dates «mm / jj / aaaa» consiste à créer un objet de date et à vérifier que son mois et sa date sont identiques à ceux de l'entrée.

 function isvalid_mdy(s){ var day, A= s.match(/[1-9][\d]*/g); try{ A[0]-= 1; day= new Date(+A[2], A[0], +A[1]); if(day.getMonth()== A[0] && day.getDate()== A[1]) return day; throw new Error('Bad Date '); } catch(er){ return er.message; } } 

Isvalid_mdy ('02 / 31/2000 ')

/ * Valeur renvoyée: (erreur) mauvaise date * /

Pouvez-vous utiliser une bibliothèque?

Mon premier port d'appel pour la gestion de la date dans Javascript est moment.js : "Une bibliothèque de date javascript pour l'analyse, la validation, la manipulation et les dates de mise en forme".