Ce script permet de vérifier et de retourner un une date entrée manuellement par l'utilisateur.
J'attends vos commentaires et suggestions pour améliorer le script.
Source / Exemple :
function dateValidReturnTry($date) // Valid is : dd/mm/yyyy
{
function _arraySortByKeys(&$a) // Ré-index toutes les clés d'un tableau sans effectué de tri
{
$i = 0;
foreach($a as $k => $v)
{
$a[$i] = $v;
$i++;
}
}
// Pré formatage
$date = trim($date);
$date = str_replace('-', '/', $date);
$date = str_replace(' ', '/', $date);
$date = str_replace('.', '', $date);
if (strlen($date) == 8 && is_numeric($date)) // Si c'est une date sans séparateur
{
$date = substr($date, 0, 2) . '/' . substr($date, 2, 2) . '/' . substr($date, 4, 4); // On les ajoute
}
if (!ereg('/', $date)) // Si, même après le pré formatage, il est impossible de trouver de séparateur
{
return false;
}
$d = explode('/', $date); // Separation des différents éléments de la date
if (count($d) != 3 || !is_numeric($d[0]) || !is_numeric($d[1]) || !is_numeric($d[2]))
{ // Si le tableau ne contient pas trois éléments ou si ceux-ci ne sont pas des nombres
return false;
}
$s = array();
// On stock chaque taille de chaque élément dans un tableau en y assignant la même clé
$s[0] = strlen($d[0]);
$s[1] = strlen($d[1]);
$s[2] = strlen($d[2]);
if ($s[0] + $s[1] + $s[2] != 8 || $s[0] > 4 || $s[1] > 4 || $s[2] > 4 || $s[0] == 3 || $s[1] == 3 || $s[2] == 3 || $s[0] < 2 || $s[1] < 2 || $s[2] < 2)
{ // Si la somme des éléments et différente de 8 ou si un des éléments est supérieur à 4 ou égale à 3 ou inférieur à 2
return false;
}
foreach ($s as $k => $v)
{
if ($v == 4) // Si la valeur de l'élément en cours est égale à 4
{
$year = $d[$k]; // On cherche son homologue dans le tableau des éléments de la date et on le désigne comme étant l'année
unset($d[$k]); // On supprime cet élément du tableau des éléments de la date
break; // On stock la boucle car nous avons trouvé notre année !
}
}
_arraySortByKeys($d); // On ré-organise la tableau car l'élément que l'on vient de supprimer peut être n'importe lequel
if ($d[1] >= 1 && $d[1] <= 12 && $d[0] > 12)
{ // Si le second élément (des éléments restants) est > 1 et < 12 et que le premier élément est lui > 12
$month = $d[1]; // C'est forcement cet index du tableau qui est le mois
unset($d[1]);
}
else
{
$month = $d[0]; // Sinon, on considère que le premier élément est le mois
unset($d[0]);
}
_arraySortByKeys($d); // Même chose, on ré-organise
if (!isset($month) || !isset($year) || !checkdate($month, $d[0], $year))
{ // Si le mois ou l'année n'a pas été trouvé ou que la date est temporellement invalide (même si sa syntaxe est bonne)
return false;
}
return $d[0] . '/' . $month . '/' . $year;
}
Conclusion :
J'attends vos avis.
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.