[FAQ] Vérifier la validité d'une date
S'il est relativement facile de vérifier qu'une date semble valide (jour de 1 à 31 éventuellement de 1 à 30 / mois de 1 à 12 et année sur 4 chiffres), il est beaucoup plus difficile de vérifier réellement qu'une date entrée correspond à une vraie date (en particulier pour les années bissextiles).
Heureusement, l'objet Date() de javascript possède une astuce souvent méconnue :
Toute valeur numérique est valable pour la définition d'une date, du coup, si vous entrez une date qui n'existe pas, javascript va rectifier de lui-même (par exemple, le 32 janvier deviendra le 1er février).
Grâce à cette astuce, nous pouvons facilement vérifier le format de la date (dans l'exemple donné le jour et le mois sur 1 ou 2 chiffres et l'année sur 4 séparés par des /) puis on affecte les valeurs splittées à une nouvelle date (en prenant soin de rectifier le mois qui commence par 0 en js !) et on vérifie que le jour le mois et l'année obtenus sont identiques à ceux de la date initiale.
Si ce n'est pas le cas, la date n'est pas valide !
Voici la source :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42
| <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr">
<head>
<title>Vérification de date</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<meta name="Author" content="Bovino - www.developpez.com" />
<script type="text/javascript">
<!--
function verif(){
var date_pas_sure = document.getElementById('valeur').value;
var format = /^(\d{1,2}\/){2}\d{4}$/;
if(!format.test(date_pas_sure)){alert('Date non valable !')}
else{
var date_temp = date_pas_sure.split('/');
date_temp[1] -=1; // On rectifie le mois !!!
var ma_date = new Date();
ma_date.setFullYear(date_temp[2]);
ma_date.setMonth(date_temp[1]);
ma_date.setDate(date_temp[0]);
if(ma_date.getFullYear()==date_temp[2] && ma_date.getMonth()==date_temp[1] && ma_date.getDate()==date_temp[0]){
alert('Date valable !');
}
else{
alert('Date non valable !');
}
}
}
//-->
</script>
</head>
<body>
<form action="javascript:verif()">
<div style="margin: 50px 0 0 50px">
<label for="valeur">Entrez un date au format jj/mm/aaaa : </label>
<input type="text" id="valeur" /><br />
<input type="submit" value="Vérifier la date" />
</div>
</form>
</body>
</html> |