Cette classe permet de retourner la différence entre 2 dates, de lister les semaines (ISO) et mois ainsi que le nombre de jours de projet à l'intérieur... je suis pas super clair là ?
Bon, regardez et dites-moi si ça vous botte :
<?php
$debut="30-3-2005";
$fin="1-4-2006";
echo "Du $debut au $fin</p>";
$gant=new Gant;
$diff=$gant->Difference($debut,$fin);
echo "<p />";
while (list ($key, $value) = each ($diff['ListeMois'])) {
echo "Mois ".$key." : ".$value." jours<br />";
}
echo "<p />";
while (list ($key, $value) = each ($diff['ListeSemaines'])) {
echo "Semaine ".$key." : ".$value." jours<br />";
}
class Gant {
function Difference($debut,$fin) {
if($this->FaisDate($fin)>=$this->FaisDate($debut)) {
$fini=false;
$i=0;
$ListeJours=array();
$ListeMois=array();
$ListeMois[date("n",$this->FaisDate($debut))."-".date("Y",$this->FaisDate($debut))]=0;
$ListeSemaines=array();
$ListeSemaines[date("W",$this->FaisDate($debut))."-".date("Y",$this->FaisDate($debut))]=0;
while($fini==false) {
$ListeJours[]=$this->AffDate($this->FaisDate($debut,$i));
if(isset($ListeMois[date("n",$this->FaisDate($debut,$i))."-".date("Y",$this->FaisDate($debut,$i))])) {
$ListeMois[date("n",$this->FaisDate($debut,$i))."-".date("Y",$this->FaisDate($debut,$i))]++;
} else {
$ListeMois[date("n",$this->FaisDate($debut,$i))."-".date("Y",$this->FaisDate($debut,$i))]=1;
}
if(isset($ListeSemaines[date("W",$this->FaisDate($debut,$i))."-".date("Y",$this->FaisDate($debut,$i))])) {
$ListeSemaines[date("W",$this->FaisDate($debut,$i))."-".date("Y",$this->FaisDate($debut,$i))]++;
} else {
$ListeSemaines[date("W",$this->FaisDate($debut,$i))."-".date("Y",$this->FaisDate($debut,$i))]=1;
}
if($this->FaisDate($fin)==$this->FaisDate($debut,$i)) { $fini=true; }
$i++;
}
}
$retour['NBJours']=$i;
$retour['ListeJours']=$ListeJours;
$retour['ListeMois']=$ListeMois;
$retour['ListeSemaines']=$ListeSemaines;
return $retour;
}
function FaisDate($date,$plus_n_jour=0) {
$tabdate=explode("-",$date);
$temps['jour']=$tabdate[0];
$temps['mois']=$tabdate[1];
$temps['annee']=$tabdate[2];
$retour=mktime(6,1,1,$temps['mois'],$temps['jour']+$plus_n_jour,$temps['annee']);
return $retour;
}
function AffDate($date) {
$jour=date("d",$date);
$mois=date("m",$date);
$annee=date("Y",$date);
return $jour."-".$mois."-".$annee;
}
}
?>