Précédent   Forum du club des développeurs et IT Pro > Webmasters - Développement Web > Contribuez
Contribuez Proposez vos articles, cours, tutoriels, questions/réponses pour les FAQ, sources et autres ressources pour la rubrique Web ainsi que ses sous-rubriques.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 13/11/2008, 19h52   #1
Bovino
Responsable Développement Web

 
Avatar de Bovino
 
Homme Didier Mouronval
Développeur Web
Inscription : juin 2008
Messages : 18 070
Détails du profil
Informations personnelles :
Nom : Homme Didier Mouronval
Âge : 42
Localisation : France, Gironde (Aquitaine)

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : juin 2008
Messages : 18 070
Points : 64 463
Points : 64 463
Par défaut [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>
__________________
Pas de question technique par MP !
Tout le monde peut participer à developpez.com, vous avez une idée, contactez-moi !
Vous possédez un blog et aimeriez diffuser vos billets sur le forum, contactez-moi !
Mes formations video2brain : La formation complète sur JavaScriptJavaScript et le DOM par la pratiquePHP 5 et MySQL : les fondamentaux
Mon livre sur jQuery
Bovino est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/11/2008, 09h27   #2
javatwister
Expert Confirmé
 
Avatar de javatwister
 
Homme
danseur
Inscription : août 2003
Messages : 2 728
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Calvados (Basse Normandie)

Informations professionnelles :
Activité : danseur

Informations forums :
Inscription : août 2003
Messages : 2 728
Points : 3 309
Points : 3 309
et ce test-là Bovino, tu le connais?
http://www.developpez.net/forums/m878767-31/

merci d'utiliser la fonction Recherche!

(nan, je rigole )
javatwister est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/11/2008, 10h42   #3
le_chomeur
Expert Confirmé Sénior
 
Avatar de le_chomeur
 
Développeur informatique
Inscription : février 2006
Messages : 3 612
Détails du profil
Informations personnelles :
Localisation : France

Informations professionnelles :
Activité : Développeur informatique

Informations forums :
Inscription : février 2006
Messages : 3 612
Points : 4 389
Points : 4 389
de plus , javascript rectifit automatiquement les dates .. par exemple le 30 février donnera 1er mars ...
__________________
est ton ami fait gagner du temps à ceux qui aident , donc un message avec la balise résolu laisse plus de temps pour résoudre d'autres problèmes

Premier ministre du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts )
le_chomeur est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/11/2008, 11h47   #4
Bovino
Responsable Développement Web

 
Avatar de Bovino
 
Homme Didier Mouronval
Développeur Web
Inscription : juin 2008
Messages : 18 070
Détails du profil
Informations personnelles :
Nom : Homme Didier Mouronval
Âge : 42
Localisation : France, Gironde (Aquitaine)

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : juin 2008
Messages : 18 070
Points : 64 463
Points : 64 463
Citation:
Envoyé par javatwister Voir le message
et ce test-là Bovino, tu le connais?
http://www.developpez.net/forums/m878767-31/

merci d'utiliser la fonction Recherche!

(nan, je rigole )
Arf... j'avais pas vu, désolé !

Citation:
Envoyé par le_chomeur
de plus , javascript rectifit automatiquement les dates .. par exemple le 30 février donnera 1er mars
Oui, c'est précisément ça qui te permet de vérifier si la date renvoyée est la même que la date entrée et donc si la date entrée était valable !
__________________
Pas de question technique par MP !
Tout le monde peut participer à developpez.com, vous avez une idée, contactez-moi !
Vous possédez un blog et aimeriez diffuser vos billets sur le forum, contactez-moi !
Mes formations video2brain : La formation complète sur JavaScriptJavaScript et le DOM par la pratiquePHP 5 et MySQL : les fondamentaux
Mon livre sur jQuery
Bovino est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/04/2012, 13h48   #5
philodido
Membre confirmé
 
Homme Vincent
Développeur informatique
Inscription : janvier 2009
Messages : 271
Détails du profil
Informations personnelles :
Nom : Homme Vincent
Localisation : France, Essonne (Île de France)

Informations professionnelles :
Activité : Développeur informatique
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : janvier 2009
Messages : 271
Points : 267
Points : 267
Merci Bovino, je t'emprunte ta fonction
philodido est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/04/2012, 13h54   #6
Bovino
Responsable Développement Web

 
Avatar de Bovino
 
Homme Didier Mouronval
Développeur Web
Inscription : juin 2008
Messages : 18 070
Détails du profil
Informations personnelles :
Nom : Homme Didier Mouronval
Âge : 42
Localisation : France, Gironde (Aquitaine)

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : juin 2008
Messages : 18 070
Points : 64 463
Points : 64 463
Avec plaisir !
__________________
Pas de question technique par MP !
Tout le monde peut participer à developpez.com, vous avez une idée, contactez-moi !
Vous possédez un blog et aimeriez diffuser vos billets sur le forum, contactez-moi !
Mes formations video2brain : La formation complète sur JavaScriptJavaScript et le DOM par la pratiquePHP 5 et MySQL : les fondamentaux
Mon livre sur jQuery
Bovino est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/04/2012, 14h25   #7
vermine
Responsable JavaScript & AJAX

 
Avatar de vermine
 
Inscription : mars 2008
Messages : 3 972
Détails du profil
Informations personnelles :
Âge : 28

Informations forums :
Inscription : mars 2008
Messages : 3 972
Points : 27 501
Points : 27 501
N'oublie pas de la rendre, elle pourrait être utile à d'autres.

vermine est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/05/2012, 15h26   #8
philodido
Membre confirmé
 
Homme Vincent
Développeur informatique
Inscription : janvier 2009
Messages : 271
Détails du profil
Informations personnelles :
Nom : Homme Vincent
Localisation : France, Essonne (Île de France)

Informations professionnelles :
Activité : Développeur informatique
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : janvier 2009
Messages : 271
Points : 267
Points : 267
Je viens de tomber sur un bug bizarre avec cette fonction quand j'utilise la fonction avec cette date 28/02/2013 ça renvoi 'Date non valable !'. J'ai pallié le bug sans trop comprendre comment en faisant :
Code :
1
2
ma_date.setMonth(date_temp[1]);
ma_date.setMonth(date_temp[1]);
Exactement la même instruction deux fois de suite !
Si quelqu'un a une explication...
philodido est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/09/2012, 10h58   #9
Kaamo
Membre Expert
 
Avatar de Kaamo
 
Homme Cyril
Ingénieur développement logiciels
Inscription : avril 2007
Messages : 524
Détails du profil
Informations personnelles :
Nom : Homme Cyril
Localisation : France, Nord (Nord Pas de Calais)

Informations professionnelles :
Activité : Ingénieur développement logiciels
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : avril 2007
Messages : 524
Points : 1 185
Points : 1 185
En passant, il serait mieux de faire ce test :

Les ma_date.getMonth / ma_date.getMonth renvoient des int tandis que les autres sont des chaines (quand c'est inférieur à 10 ça revient à faire un test 9 != 09 par exemple. Ça renvoie non égal alors qu'ils le sont en réalité)

En somme, cela donnerait :
Code Javascript :
1
2
3
4
5
6
date_split = date_a_tester.split('/', 3);
date = new Date(date_split[2], date_split[1] - 1, date_split[0]);
if ( date.getFullYear() == date_split[2] && (date.getMonth()+1)  == parseInt(date_split[1]) && date.getDate() == parseInt(date_split[0]) && /^(\d{1,2}\/){2}\d{4}$/.test(date_a_tester)) 
  alert("La date est valide.");
else
  alert("La date n'est pas valide.");
Kaamo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/09/2012, 11h11   #10
Bovino
Responsable Développement Web

 
Avatar de Bovino
 
Homme Didier Mouronval
Développeur Web
Inscription : juin 2008
Messages : 18 070
Détails du profil
Informations personnelles :
Nom : Homme Didier Mouronval
Âge : 42
Localisation : France, Gironde (Aquitaine)

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : juin 2008
Messages : 18 070
Points : 64 463
Points : 64 463
Citation:
Des || à la place des &&
Euh... pas vraiment...
Voir le test suivant
Code :
1
2
3
4
5
6
7
8
var ma_date = new Date(2012, 8, 14);
var date_temp = [12, 7, 2012];
if(ma_date.getFullYear()==date_temp[2] || ma_date.getMonth()==parseInt(date_temp[1]) || ma_date.getMonth()==parseInt(date_temp[0])){
    alert('Date valable !');
}
else{
    alert('Date non valable !');
}
Citation:
quand c'est inférieur à 10 ça revient à faire un test 9 != 09 par exemple.
Pas d'accord non plus, ça revient à faire 9 != '09' qui renvoi le bon résultat...
__________________
Pas de question technique par MP !
Tout le monde peut participer à developpez.com, vous avez une idée, contactez-moi !
Vous possédez un blog et aimeriez diffuser vos billets sur le forum, contactez-moi !
Mes formations video2brain : La formation complète sur JavaScriptJavaScript et le DOM par la pratiquePHP 5 et MySQL : les fondamentaux
Mon livre sur jQuery
Bovino est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/09/2012, 11h26   #11
Kaamo
Membre Expert
 
Avatar de Kaamo
 
Homme Cyril
Ingénieur développement logiciels
Inscription : avril 2007
Messages : 524
Détails du profil
Informations personnelles :
Nom : Homme Cyril
Localisation : France, Nord (Nord Pas de Calais)

Informations professionnelles :
Activité : Ingénieur développement logiciels
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : avril 2007
Messages : 524
Points : 1 185
Points : 1 185
Citation:
Euh... pas vraiment...
Voir le test suivant
Oui désolé, je devais modifier mon message pendant l'écriture du vôtre ! J'ai fait le test inverse de mon coté, c'est pour ça.

Citation:
Pas d'accord non plus, ça revient à faire 9 != '09' qui renvoi le bon résultat...
je tournerai ma langue deux fois avant de poster la prochaine fois. En effet, de mon coté j'ai transformé les .getXXX en chaine pour reconstituer la date complète ... bref, perte de temps, désolé
Kaamo est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 00h20.


 
 
 
 
Partenaires

Hébergement Web