Controle des dates

Résolu
cs_ov3rdoze Messages postés 414 Date d'inscription lundi 19 juillet 2004 Statut Membre Dernière intervention 23 septembre 2014 - 26 avril 2006 à 09:56
syndrael Messages postés 2378 Date d'inscription lundi 4 février 2002 Statut Membre Dernière intervention 29 décembre 2012 - 4 mai 2006 à 19:23
Salut
Je débute et j'ai voulu faire une fonction qui vérifie à la volée la date saisie dans un input.
Pour l'instant je n'ai pas traité les années bissextiles ni fevrier mais le code est déjà lourd.
En plus dans certains cas le curseur ne suis pas quand on rajoute des caractères...
Aidez moi svp

Voila le code (Très lourd):
function verifDate(object, sep) { //sep est le séparateur choisi
var re = /^[0-9]$/; //Expression régulière
var re2 = /^[0-3]$/; //Expression régulière
var re3 = /^[4-9]$/; //Expression régulière
var re4 = /^[0-1]$/; //Expression régulière
var re5 = /^[2-9]$/; //Expression régulière
var re6 = /^[02]$/; //Expression régulière
var re7 = /^[13578]$/;
var re8 = /^[0-2]$/; //Expression régulière
var re9 = /^[1-9]$/; //Expression régulière
var tmp = ""; //Tampon 1
var tmp2 = ""; //Tampon 2
var ch = object.value.toString(); //Récupération de la valeur à tester
if (ch != "") { //Si elle est pas vide (Evite une erreur si on efface ce qu'on a tapé)
for (i=0; i<ch.length; i++) { //On la parcoure <== Début boucle
switch (i) { //Pour chaque element...............
case 0:
if (re2.test(ch.charAt(i))) tmp += ch.charAt(i); //Si le 1er chiffre est 0, 1, 2 ou 3 on le garde
else if (re3.test(ch.charAt(i))) tmp += ("0" + ch.charAt(i) + sep); //Si il est > 3 on met un 0 devant
break;

case 1:
if (tmp.charAt(0) == "3") { //Si le 1er chiffre est 3
if (re4.test(ch.charAt(i))) tmp += (ch.charAt(i) + sep); //Le 2eme ne peut être que 0 ou 1
} else {
tmp += (ch.charAt(i) + "/"); //Sinon on garde le 2eme et on ajoute le séparateur
} break;

case 3:
if (re4.test(ch.charAt(i))) tmp += ch.charAt(i); //On autorise que les caractères 0 et 1
else if (re5.test(ch.charAt(i))) { //Sinon (pas seulement else pour pas mettre des lettres ou autre...)
if (tmp.charAt(0) == "3") {
if (tmp.charAt(1) == "1") { //Si on a mis le 31
if (re7.test(ch.charAt(i))) tmp += ("0" + ch.charAt(i) + sep);//On peut mettre que certains mois
} else {
if (re9.test(ch.charAt(i))) tmp += ("0" + ch.charAt(i) + sep);
}
} else {
if (re9.test(ch.charAt(i))) tmp += ("0" + ch.charAt(i) + sep);
}
}
break; //Dans tous les cas si c'est pas 0 ou 1 on rajoute un 0 devant

case 4: // <== Marche comme le case du dessus
if (tmp.charAt(0) == "3") {
if (tmp.charAt(1) == "1") {
if (tmp.charAt(3) == "1") {
if (re6.test(ch.charAt(i))) tmp += (ch.charAt(i) + sep);
} else {
if (re7.test(ch.charAt(i))) tmp += (ch.charAt(i) + sep);
}
} else {
if (tmp.charAt(3) == "1") {
if (re8.test(ch.charAt(i))) tmp += (ch.charAt(i) + sep);
} else {
if (re9.test(ch.charAt(i))) tmp += (ch.charAt(i) + sep);
}
}
} else {
if (tmp.charAt(3) == "1") {
if (re8.test(ch.charAt(i))) tmp += (ch.charAt(i) + sep);
} else {
if (re9.test(ch.charAt(i))) tmp += (ch.charAt(i) + sep);
}
}
break;

default:
if (re.test(ch.charAt(i))) { //Si elle vérifie l'expression régulière
if (tmp.length 2 || tmp.length 5) tmp += sep; //On ajoute le / si on est au bon endroit
tmp += ch.charAt (i); //On insère les chiffres
} break;
}
} // <== Fin boucle
if (tmp.length > 10) { //Si ya trop de chiffres
for (i=0; i<10; i++) tmp2 += tmp.charAt(i); //On parcour juste la longueur nécessaire
} else { tmp2 = tmp; } //Sinon on récupère directement la valeur
object.value = tmp2; //On met à jour le input
}
}

8 réponses

syndrael Messages postés 2378 Date d'inscription lundi 4 février 2002 Statut Membre Dernière intervention 29 décembre 2012 20
26 avril 2006 à 14:30
juste un exemple
http://www.mattkruse.com/javascript/calendarpopup/

Le deuxième select devrait te convenir. Il te faudra juste modifier le code pour faire apparaitre la date au format français..

S.
3
syndrael Messages postés 2378 Date d'inscription lundi 4 février 2002 Statut Membre Dernière intervention 29 décembre 2012 20
26 avril 2006 à 10:23
Ne cherche plus !! J'ai ton bonheur..

Cliqueici tu vas comprendre.. Assez des algos et des années bissextiles !!

S.
0
cs_ov3rdoze Messages postés 414 Date d'inscription lundi 19 juillet 2004 Statut Membre Dernière intervention 23 septembre 2014
26 avril 2006 à 10:46
Nickel:)
Mais la ou je galère c'est au moment de la saisie:
Par exemple si on tape 31 un '/' se rajour automtiquement. Ca ca marche
Mais apres il faut pas qu'on puisse par exemple taper 11 parceque le 31 novembre ca existe pas.
Ca marche à peu pres mais le curseur ne suis pas les caractères qui se rajoutent et du coup les chiffres qu'on tape sont insérés au mauvais endroit:(
0
syndrael Messages postés 2378 Date d'inscription lundi 4 février 2002 Statut Membre Dernière intervention 29 décembre 2012 20
26 avril 2006 à 12:51
Ouh là !! Tu fais de la saisie auto-complétée !! Bon courage.. Je te
conseille alors de faire appel à des calendriers.. kom le site
www.voyages-sncf.fr. Tu cliques sur le calendrier tu es sur de ne rien
frappé d'incorrect.

Perso pour le saisie je te coseille de lancer ta vérification de date
une fois la case de saisie quittée donc par le biais d'un

S.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_ov3rdoze Messages postés 414 Date d'inscription lundi 19 juillet 2004 Statut Membre Dernière intervention 23 septembre 2014
26 avril 2006 à 14:22
ok merci vais chercher de ce coté
0
cs_ov3rdoze Messages postés 414 Date d'inscription lundi 19 juillet 2004 Statut Membre Dernière intervention 23 septembre 2014
26 avril 2006 à 14:54
Terrible!!!
J'avais essayé de faire un truc dans le genre mais j m'en etais pas sorti. C exactement ce qui faut
Merci
0
cs_sayann Messages postés 11 Date d'inscription lundi 6 mars 2006 Statut Membre Dernière intervention 9 février 2009
4 mai 2006 à 17:02
Salut !

Je reviens sur un truc qui a été dit, les fameux calendriers sur www.voyage-sncf.com, comment on les fait ?
Ou est-ce que je pourrais trouver un truc de ce genre ?
Merci
@+

Sayann
0
syndrael Messages postés 2378 Date d'inscription lundi 4 février 2002 Statut Membre Dernière intervention 29 décembre 2012 20
4 mai 2006 à 19:23
Regarde le lien du dessus.. C'est exactement ça..

Je te le redonne..

http://www.mattkruse.com/javascript/calendarpopup/

S.
0
Rejoignez-nous