Mammouth du PHP |
19672 Messages
25 févr. 2006, 16:20
Si tu veux valider une date avec du JavaScript, il va te falloir un tout petit peu plus que ces quelques lignes. Voici un code qui va valider une date au format JJ/MM/AAAA : il te suffira ensuite d'une expression régulière coté PHP pour la formatter pour MySQL :
Code JavaScript
/**
* Vérification qu'un date au format JJ/MM/AAAA est valide
*
* Paramètre Chaine champ
* Retour Booléen
*/
function valideDate(champ)
{
/* Extraction des différentes parties de la date */
var tab = champ.split("/");
var jourStr = tab[0];
var moisStr = tab[1];
var anneeStr = tab[2];
var jourDate = parseInt(jourStr);
var moisDate = parseInt(moisStr);
var anneeDate = parseInt(anneeStr);
/* Paramètres de nombres de jours */
var jours31 = new Array(1, 3, 5, 7, 8, 10, 12);
var jours30 = new Array(4, 6, 9, 11);
/* Retour */
var dateValide = false;
Array.prototype.contient = function(valeur)
{
for (var i in this)
{
if (this[i] == valeur) return true;
}
return false;
}
/* Recherche */
if(true === jours31.contient(moisDate))
{
/* On a un mois de 31 jours */
if(jourDate <= 31)
{
dateValide = true;
}
}
else if(true === jours30.contient(moisDate))
{
/* On a un mois de 30 jours */
if(jourDate <= 30)
{
dateValide = true;
}
}
else
{
/* On est au mois de février */
var anB = anneeBissextile(anneeDate);
if(true === anB && jourDate <= 29)
{
dateValide = true;
}
if(false === anB && jourDate <= 28)
{
dateValide = true;
}
}
return dateValide;
}
/**
* Vérification qu'une année est bissextile
*
* Paramètre Int annee au format entier de 4 chiffres
* Retour Booléen
*/
function anneeBissextile(annee)
{
var bissextile = false;
/* Si l'année est divisible par 4 */
if(annee % 4 == 0)
{
/* Si l'année est séculaire */
if(annee % 100 == 0)
{
/* Si l'année séculaire est divisible par 400 */
if(annee % 400 == 0)
{
bissextile = true;
}
}
else
{
bissextile = true;
}
}
return bissextile;
}
L'expression régulière en PHP:
$masque_date_sql = "#(\d{2})/(\d{2})/(\d{4})#";
$remplacement = "$3-$2-$1";
$champ_date = preg_replace($masque_date_sql, $remplacement, $date_form);
Attention dans le JavaScript, la seconde fonction n'est appelée que par la première, tu n'as pas besoin de l'eppeler directement. La première te renvoie TRUE si la date est valide et au bon format, FALSE dans le cas contraire.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse 