Vérifier une date

Soyez le premier à donner votre avis sur cette source.

Snippet vu 43 687 fois - Téléchargée 27 fois

Contenu du snippet

Cette fonction va vous permettre de vérifier si une date saisie est valide. La saisie s'effectue sur le format français, en jj/mm/aaaa ou bien jj/mm/aa. Elle prend en compte les années bissextiles.

Source / Exemple :


<script type="text/javascript"><!--
function isDate(d) {
	// Cette fonction permet de vérifier la validité d'une date au format jj/mm/aa ou jj/mm/aaaa
	// Par Romuald
	
	if (d == "") // si la variable est vide on retourne faux
		return false;
	
	e = new RegExp("^[0-9]{1,2}\/[0-9]{1,2}\/([0-9]{2}|[0-9]{4})$");
	
	if (!e.test(d)) // On teste l'expression régulière pour valider la forme de la date
		return false; // Si pas bon, retourne faux

	// On sépare la date en 3 variables pour vérification, parseInt() converti du texte en entier
	j = parseInt(d.split("/")[0], 10); // jour
	m = parseInt(d.split("/")[1], 10); // mois
	a = parseInt(d.split("/")[2], 10); // année

	// Si l'année n'est composée que de 2 chiffres on complète automatiquement
	if (a < 1000) {
		if (a < 89)	a+=2000; // Si a < 89 alors on ajoute 2000 sinon on ajoute 1900
		else a+=1900;
	}

	// Définition du dernier jour de février
	// Année bissextile si annnée divisible par 4 et que ce n'est pas un siècle, ou bien si divisible par 400
	if (a%4 == 0 && a%100 !=0 || a%400 == 0) fev = 29;
	else fev = 28;

	// Nombre de jours pour chaque mois
	nbJours = new Array(31,fev,31,30,31,30,31,31,30,31,30,31);

	// Enfin, retourne vrai si le jour est bien entre 1 et le bon nombre de jours, idem pour les mois, sinon retourn faux
	return ( m >= 1 && m <=12 && j >= 1 && j <= nbJours[m-1] );
}
//-->
</script>

Conclusion :


Voilà, je pense que cette fonction marche sur 99.9 % des navigateurs (comme les schurlumphs anti-bactériens).
Je n'ai pas testé sur Netscape (que je n'ai pas :) par contre.

A voir également

Ajouter un commentaire

Commentaires

problème: impossible de saisir 08 et 09 en jour et en mois. Par exemple, impossible de rentrer la date: 12/08/01 ou 09/11/2001, 08/09/2000... enfin toutes les dates qui contiennent 08 ou 09. Par contre, on peut mettre 8 ou 9 (8/9/2001). Auriez-vous une solution?problème avec le javascript.
cs_lje
Messages postés
1
Date d'inscription
mardi 18 décembre 2001
Statut
Membre
Dernière intervention
30 janvier 2002
-
il faut utiliser

var j = number(d.split("/")[0]); // jour
var m = number(d.split("/")[1]); // mois
var a = number(d.split("/")[2]); // année

ça marche mieux
canonbis
Messages postés
4
Date d'inscription
vendredi 20 octobre 2000
Statut
Membre
Dernière intervention
21 mars 2005
-
Le probleme ne se résout pas en mettant var = number...
mais en rajoutant un paramètre:*
--------> j = parseint(d.split("/")[0],***10***); // jour
le 10 permet de lire tous les chiffres!!!! il ne faut pas mettre les ****
cs_booth
Messages postés
220
Date d'inscription
lundi 14 janvier 2002
Statut
Membre
Dernière intervention
13 juin 2005
-
pour le problème avec les 08 et 09, faut juste faire ça :
var j = (d.split("/")[0]); // jour
var m = (d.split("/")[1]); // mois
var a = (d.split("/")[2]); // année

ça sert à rien de les convertir en intéger, vu ke les variables j m et a sont pas typées...
now ça marche.
cs_Romuald
Messages postés
172
Date d'inscription
lundi 30 avril 2001
Statut
Membre
Dernière intervention
6 avril 2003
-
En effet le parseInt(xzy, 10) est solution qui marche.

En revanche il semble que ce soit le Javascript à la fois d'IE et de Mozilla qui ne sont pas conformes à l'ECMAScript qui spécifie que si le deuxième paramètre n'est pas un chiffre alors il faut utiliser 10 X-(

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.