0/5 (2 avis)
Snippet vu 5 949 fois - Téléchargée 29 fois
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; }
23 sept. 2005 à 13:47
ta fonction est marrante.
Néanmoins, un reproche : si la date passée est valide, ta fonction ne renvoie que false, à priori. Tu devrais renvoyer la date.
Ensuite, un truc qui...bon...est un choix : elle inverse systématiquement, si c'est possible, jour et mois. S on met
1998/05/06 on obtient 06/05/1998.
Idem pour ça : echo dateValidReturnTry ('05/1998/06');
Et ça : echo dateValidReturnTry ('05199806');
retourne un truc bizarre ;-): 19/05/9806 . Je doute que ta fonction soit encore utilisée en 9806...tu peux mettre une borne, je pense.
Enfin je trouve ton code peu clair : surtout au niveau des variables.
Je ne vois pas l'intérêt de déclarer une fonction DANS une autre fonction.
Ceci :
$date = str_replace('-', '/', $date);
$date = str_replace(' ', '/', $date);
peut-être raccourci, éventuellement.
J'ai plus le temps de continuer, lol. Bref, je trouve ta fonction sympa:-)
22 sept. 2005 à 21:06
Ya un truc qiu me parait byzarre dans ton if avec tes 12 millions de conditions : un nombre entier est forcemment > 4, =3 ou <2 non? donc ta condition est forcement vrai et ta fonction retourne systematiquement false ?
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.