Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

TESTER SI UNE DATE EST VALIDE


Information sur la source

Catégorie :Date & Heure Niveau : Débutant Date de création : 13/07/2004 Date de mise à jour : 13/07/2004 00:38:48 Vu : 11 631

Note :
1 / 10 - par 1 personne
1,00 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

Commentaire sur cette source (9)
Ajouter un commentaire et/ou une note

Description

J'ai cherché une fonction qui fasse pareille mais je n'étais pas satisfait de ce que j'ai trouvé. alors voilà une sortie tout droit de ma tête.

Cette fonction teste si une date est valide.
on peut l'utiliser avant de valider un formulaire.
il faut envoyer 3 paramètres à cette fonction (jours, mois, année)
 

Source

  • function date_valide(x,y,z)
  • {
  • /*
  • pour mes dates j'utilise 3 listes réroulantes (on peut utiliser aussi 3inputbox... il faut juste adapter si nécessaire.)
  • 1 pour les jours, 1 pour les mois et 1 pour les années.
  • x = jours
  • y = mois
  • z = année
  • -------------------------------
  • Cette fonction envoie "True" si une date est valide
  • et dans le cas contraire "False".*/
  • if ((x <= 31)&&(nbjours_mois(y,z)==31))
  • {
  • return("True");
  • }
  • else if ((x <= 29)&&(nbjours_mois(y,z)==29))
  • {
  • return("True");
  • }
  • else if ((x<=28)&&(nbjours_mois(y,z)==28))
  • {
  • return("True");
  • }
  • else if ((x<=30)&&(nbjours_mois(y,z)==30))
  • {
  • return("True");
  • }
  • else
  • {
  • return("False");
  • }
  • }
  • function nbjours_mois(mois,annee)
  • {
  • /* cette fonction envoie le nombre de jours dans 1 mois.
  • il prend en compte les années bissextiles.
  • !!! l'année bissextile n'est pas vraiment juste !!!
  • il arrive tous les 400 ans si je ne me trompes pas qu'une année
  • divisible par 4 ne soit pas bissextile.. d'ici là on sera plus là :-))*/
  • if ((document.forms[0].mois.value==1)||(mois==3)||
  • (mois==5)||(mois==7)||
  • (mois==8)||(mois==10)||
  • (mois==12))
  • {
  • return(31);
  • }
  • else if ((mois==4)||(mois==6)||
  • (mois==9)||(mois==11))
  • {
  • return(30);
  • }
  • else if ((mois==2)&&(annee % 4 ==0))
  • {
  • return(29);
  • }
  • else
  • {
  • return(28);
  • }
  • }
function date_valide(x,y,z)
{
/*
pour mes dates j'utilise 3 listes réroulantes (on peut utiliser aussi 3inputbox... il faut juste adapter si nécessaire.)
1 pour les jours, 1 pour les mois et 1 pour les années.
x = jours
y = mois
z = année
-------------------------------
Cette fonction envoie "True" si une date est valide
et dans le cas contraire "False".*/

	if ((x <= 31)&&(nbjours_mois(y,z)==31))
	{
	return("True");
	}
	else if ((x <= 29)&&(nbjours_mois(y,z)==29))
	{
	return("True");
	}	
	else if ((x<=28)&&(nbjours_mois(y,z)==28))
	{
	return("True");
	}	
	else if ((x<=30)&&(nbjours_mois(y,z)==30))
	{
	return("True");
	}	
	else
	{
	return("False");
	}
}
function nbjours_mois(mois,annee)
{
/* cette fonction envoie le nombre de jours dans 1 mois.
il prend en compte les années bissextiles.
!!! l'année bissextile n'est pas vraiment juste !!!
il arrive tous les 400 ans si je ne me trompes pas qu'une année
divisible par 4 ne soit pas bissextile.. d'ici là on sera plus là :-))*/
	
	if ((document.forms[0].mois.value==1)||(mois==3)||
		(mois==5)||(mois==7)||
		(mois==8)||(mois==10)||
		(mois==12))
	{
	return(31);
	}
	else if ((mois==4)||(mois==6)||
		(mois==9)||(mois==11))
	{
	return(30);
	}
	else if ((mois==2)&&(annee % 4 ==0))
	{
	return(29);
	}
	else
	{
	return(28);
	}

}

Conclusion

si vous avez des questions/remarques, n'hésitez pas!!

:-))
 

Historique

13 juillet 2004 00:38:48 :
.

Commentaires et avis

signaler à un administrateur
Commentaire de traversbourquin le 14/07/2004 03:01:04

<script type="text/javascript">
function test_date(jj,mm,aa){
if(jj.length!=2||jj<1||jj>31||mm.length!=2||mm<1||mm>12||aa.length!=4) return false;
if(mm==2){
if(jj==30||jj==31) return false;
if(jj==29) return ((aa%4==0&&aa%100!=0)||aa%400==0);
}
if(jj==31) return !(mm==4||mm==6||mm==9||mm==11);return true;
}

function date_valide(valeur){
var valeurDate=valeur, indSep1=valeurDate.indexOf("/"), indSep2=valeurDate.lastIndexOf("/"), jj=valeurDate.substring(0,indSep1), mm=valeurDate.substring(indSep1+1,indSep2), aa=valeurDate.substr(indSep2+1);
if ((indSep1==-1) && (indSep1==indSep2)) return false;
if (!test_date(jj,mm,aa)) return false;
return true;
}

function test_saisie(){
var formulaire=document.forms["form1"];
if (!date_valide(formulaire.elements["date"].value)){
alert("Veuillez vérifier la saisie de la date");
return false;
}
return true;
}
</script>

<body>
<form name="form1" onSubmit="return test_saisie()">
Date (au format jj/mm/aaaa)  : <INPUT type="text" name="date">
</form>
</body>

signaler à un administrateur
Commentaire de oimbart le 14/09/2004 09:22:14

Hmm /!\

Si l'année n'est pas divisible par 4, l'année n'est pas bissextile.

Si l'année est divisible par 4, l'année est bissextile sauf si l'année est divisible par 100 et pas par 400.

Donc le premier n'est pas bon le deuxieme qui est en commentaire Oui (a ce niveau là)

A quoi sert de mettre un programme si il n'est pas expliqué?

signaler à un administrateur
Commentaire de traversbourquin le 14/09/2004 17:30:25

oimbart :
> A quoi sert de mettre un programme si il n'est pas expliqué?

Est-ce que cette remarque est pour moi ?
Si oui, autant préciser tout de suite que le code source n'est pas à la portée d'un débutant !

signaler à un administrateur
Commentaire de cbeyls le 22/01/2005 00:52:35

Sans vouloir être méchant, le code est vraiment décousu... en effet, au lieu d'écrire toute cette tartine:

if ((x <= 31)&&(nbjours_mois(y,z)==31))
  {
  return("True");
  }
  else if ((x <= 29)&&(nbjours_mois(y,z)==29))
  {
  return("True");
  }  
  else if ((x<=28)&&(nbjours_mois(y,z)==28))
  {
  return("True");
  }  
  else if ((x<=30)&&(nbjours_mois(y,z)==30))
  {
  return("True");
  }  
  else
  {
  return("False");
  }

Il suffirait d'écrire:

return ( x <= nbjours_mois(y,z) );

Oui tout ça peut se résumer en une ligne! Mais le test n'est pas complet. En effet, il serait mieux de tester également si le jour est > 0. Ce qui donne:

return ( (x > 0) && (x <= nbjours_mois(y,z)) );

Pour l'année bissextile, il est plus judicieux d'écrire une fonction qui prend en paramètre une année et renvoie true si et seulement si celle-ci est bissextile. Cela peut s'écrire également en une ligne:

function bissextile (annee) {
   return (annee%4 ==0) && ( (annee%100 !=0) || (annee%400 ==0) );
}

Et celle-ci est juste. Quand tu dis que dans 400ans on ne sera plus là, pense à un programme d'histoire qui récolte des dates du passé... par exemple 1600... c'est pas si loin que ça finalement. Et de toutes façons, le raisonnement est faux puisque les années multiples de 400 sont bissextiles, et toutes les autres multiples de 100 ne le sont pas.

signaler à un administrateur
Commentaire de michel_roger le 31/01/2005 00:28:30

Moi g fais ca, avec une liste déroulante pour les mois...
G préféré la facilité ;-), ca enlève le contrôle du mois entre 1 et 12...
donc pour le javascript voila :
//
// Renvoie true si la date est valide, false sinon
// Les paramètres: jour:val1; mois:val2; année:val3;
//
function testDate(val1, val2, val3) {
if(val1 == '0' || val1 == '00' || val3 == '0' || val3 == '00')
return false;
if(val3.length < 4)
return false;

var j_fev = ( bissextile(val3) ) ? ( 29 ) : ( 28 );
var tab_jours_mois = new Array(31,j_fev,31,30,31,30,31,31,30,31,30,31);
if(val1 > tab_jours_mois[val2-1])
return false;
return true;
}
//
// Reprise de la fonction de cbeyls
// pour savoir si l'année est bissextile
//
function bissextile (annee) {
  return (annee%4 == 0) && ( (annee%100 != 0) || (annee%400 == 0) );
}

signaler à un administrateur
Commentaire de Toniolol le 09/03/2005 08:47:56

J'ai lu vos codes et voici le mien :
(bien entendu on récupère intAnnee, intMois, intJour où on veut....)

//on déclare la date de naissance
var DateControle = new Date();
DateControle.setYear(intAnnee);
DateControle.setMonth(intMois-1);
DateControle.setDate(intJour);
//et on controle qu'elle existe
if (intJour!=DateControle.getDate() || intMois!=DateControle.getMonth()+1 || intAnnee!=DateControle.getFullYear())
{
alert("Ce jour n'a jamais existé !");
}
else....

petite explication au cas où :
   je stocke la date entrée par l'utilisateur dans une date (attention les mois commencent à 0...), si on rentre un truc du genre 32/01/1950 il renvoie 01/02/1950 donc il suffit de ressortir et de comparer avec l'entrée...
Donc pas de prise de tête avec les années bissextiles, à tester...merci de me signaler si ce code est correct.
@+ ;p

signaler à un administrateur
Commentaire de dammak le 04/12/2005 12:42:47

je cherche le teste  de validation d'un  formulaire d'insccription avec jsp ou java script
les champs son les suivants
nom/prénom/adresse/tel/mail/pseudo/login/date naissance/et il ya des champs obligatoire et des autre non
j'attend au moin un exemple et merci.
                                                                                                   DIABLO

signaler à un administrateur
Commentaire de dammak le 04/12/2005 12:46:43

je cherche le teste  de validation d'un  formulaire d'insccription avec jsp ou java script
les champs son les suivants
nom/prénom/adresse/tel/mail/pseudo/login/date naissance/et il ya des champs obligatoire et des autre non
j'attend au moin un exemple et merci.
                                                                                                   DIABLO

signaler à un administrateur
Commentaire de dammak le 04/12/2005 12:51:18

autre demande
voila je cherche un programme en java qui transforme une tableau de valeurs en courbe 2D,3D et en histogramme  

Ajouter un commentaire



Nos sponsors

Sondage...

CalendriCode

Janvier 2009
LMMJVSD
   1234
567891011
12131415161718
19202122232425
262728293031 

Consulter la suite du CalendriCode



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel BAÏSE, Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,234 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.