Imaginons, un calendrier à 3 mois.
Le premier mois fait 25 jours.
Le second mois fait 12 jours.
Le troisième mois fait 72 jours.
L'année fait donc 25 + 12 + 72 = 109 jours
 
Le temps 0 du calendrier est défini au "8/11/2012 à 20:18:09" soit le timstamp unix : define(TEMPS0, 1352402289)
 
On récupère l'instant courant grâce à time() auquel on soustrait TEMPS0;
$secondesEcouleDepuisT0 = time() - TEMPS0;
 
On calcule le nombre de jours écoulés depuis TEMPS0 pour que ça soit plus pratique à manipuler.
$joursEcouleDepuisT0 = ($secondesEcouleDepuisT0  - ($secondesEcouleDepuisT0 % (3600*24))) / (3600*24);
 
Pour récupérer l'année en cours c'est "on est l'année ". floor($joursEcouleDepuisT0 / 109);
 
Le but maintenant est de savoir quel mois on est.
 
On calcule le nombre de jours écoulés depuis le début de l'année courante.
 
$joursDeLAnneeCourante = $joursEcouleDepuisT0 % 109;
 
On pose le tableau suivant : $joursParMois = array(25, 12, 72);
 
Il faut produire un tableau avec les jours cumulatifs par mois.
 
$joursCumulParMois = array(25, 25+12, 25+12+72);
 
On termine par un foreach même s'il doit y avoir un moyen plus optmisé mathématiquement.
 
Code :
 - foreach ($joursCumulParMois as $nMois => $cumul) {
 -   if ($joursDeLAnneeCourante < $cumul) {
 -      echo "On est le jour ". ($joursDeLAnneeCourante - $cumul + $joursParMois[$nMois]). " du mois ". ($nMois). "\n";
 -      break;
 -   }
 - }
 
  | 
 
Message édité par czh le 08-11-2012 à 21:18:44