Soyez le premier à donner votre avis sur cette source.
Snippet vu 12 285 fois - Téléchargée 27 fois
// Donne l'intervale en jours entre 2 dates function intervaleDates($date1,$date2) { // $date2 sera plus récente que $date1 if (intval($date1) > intval($date2)) { $tmp = $date1; $date1 = $date2; $date2 = $tmp; } // les dates sont-elles au bon format ? if (ereg("([0-9]{4})([0-9]{2})([0-9]{2})", $date1, $regs1) && ereg("([0-9]{4})([0-9]{2})([0-9]{2})", $date2, $regs2)) { $d1 = intval($regs1[3]); $m1 = intval($regs1[2]); $y1 = intval($regs1[1]); $d2 = intval($regs2[3]); $m2 = intval($regs2[2]); $y2 = intval($regs2[1]); $by1 = ($y1 - 2000) % 4; $by2 = ($y2 - 2000) % 4; $dy1 = array(0,31,($by1 == 0 ? 29 : 28),31,30,31,30,31,31,30,31,30,31); $dy2 = array(0,31,($by2 == 0 ? 29 : 28),31,30,31,30,31,31,30,31,30,31); // si les années sont différentes // on ajoute les jours restant à $y1 et les jours de plus à $y2 + 1 pour le passage d'année // puis on ajoute les jours des années entre $y1 et $y2 if ($y1 != $y2) { $interval = intervaleDates($date1,$y1."1231") + intervaleDates($y2."0101",$date2) + 1; for ($i = $y1 + 1; $i < $y2; $i++) { $b = ($i - 2000) % 4; $interval += ($b == 0 ? 366 : 365); } return $interval; } // Si $y1 == $y2 // si les mois sont égaux, on renvoie la différence entre les jours if ($m1 == $m2) return $d2 - $d1; // sinon on fait un savant calcul ;) if ($m2 > $m1) { $r1 = 0; for ($i = $m1; $i < $m2; $i++) $r1 += $dy1[$i]; return $r1 - $d1 + $d2; } } echo "<b>Parse error:</b> Argument(s) incorrect(s) pour intervaleInDays(). Attendu : 'AAAAMMJJ'<br />\n"; return FALSE; }
Commentaires
Dans le contexte d'utilisation que j'ai des calculs de date, je fais des stats et des calculs suivants des filtres sur dates avec des périodes données... et j'utilise donc le système de requete SQL pour faire mes calculs.
Comme ca, j'ai plus qu'un traitement d'affichage à faire...
.oOMimiLOo.
> natha : bien sur, ca marche avec des dates < à 1970.
ça veut dire qu'il comptait utiliser cette méthode même hors contexte BDD, ce que, très personnellement, je trouve furieux, sans rancune ;-)
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.