begin process at 2010 02 09 20:49:23
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Date & Heure

 > TESTER SI UNE DATE EST VALIDE

TESTER SI UNE DATE EST VALIDE


 Information sur la source

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

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
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 :14 953

Auteur : bossun

Ecrire un message privé
Commentaire sur cette source (10)
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 :
.

 Sources de la même categorie

Source avec Zip CHRONOMÈTRE AMÉLIORÉ par Kolosta
Source avec Zip SLEEP() SANS BOUCLE D'ATTENTE CONSOMMATRICE par Phildepantin
Source avec Zip AFFICHAGE DE L'HEURE ET DU FUSEAU HORAIRE (TIMEZONE) SUR LA ... par navylav2
Source avec Zip Source avec une capture HORLOGE TRIPLE AFFICHAGE AU FORMAT AM/PM/24H/DST par sofiane1234
Source avec Zip Source avec une capture HORLOGE NUMÉRIQUE EN JAVASCRIPT, COMPATIBLE IE ET FF par bad_dark_spirit

Commentaires et avis

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>

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é?

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 !

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.

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) );
}

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

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

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

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  

Commentaire de BatMen63 le 14/10/2009 15:39:40

Bravo, traversbourquin, code super optimisé.
Il manque juste un test essentiel : vérifier que dd, mm, et aa soient des nombres..."jj/mm/yyyy" passe tranquille :)

 Ajouter un commentaire




Nos sponsors


Sondage...

CalendriCode

Février 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), 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

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,530 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales