[RESOLU] calculer les mois trimestrielle en fonction d'un mois de reference.

Eléphanteau du PHP | 13 Messages

11 mai 2015, 14:48

Bonjour à tous,

je suis trop quiche avec le calcul des dates et maths en général. J'ai essayé les modulos, les boucles for et if mais ma logique ne parvient pas à réaliser ce que je souhaite.

j'ai un $mois_reference, exemple = 04 (donc avril)...
j'ai besoin de récupérer les mois correspondants au date trimestrielle de ce mois de reference :

$tab_mois_trim = array(04, 07, 10, 01);

un coup de pouche ?


Merci !

Mammouth du PHP | 688 Messages

11 mai 2015, 14:51

c'est pas clair, quel est le résultat auquel il faut aboutir pour 04, 03 ?

Eléphanteau du PHP | 13 Messages

11 mai 2015, 15:10

Merci de ton retour, en fait il faut prendre le $mois_de_reference, et lui additioner 3, et stocker ca dans un tableau... mais s'il depasse 12, il doit revenir au mois de janvier (01)

donc pour le mois de reference AVRIL(04) je dois avoir pour resultat un tableau contenant les variables suivantes : AVRIL(04), JUILLET(07),OCTOBRE(10), JANVIER(01)... et s'arreter une fois la boucle bouclé evidemment :p quand il revient au $mois_de_reference.

Eléphanteau du PHP | 13 Messages

11 mai 2015, 15:17

un autre exemple pour clarifier le retour au mois de janvier
si $mois_de_reference = MARS(03)
resultat = array(03, 06, 09,12)

si $mois_de_reference = NOVEMBRE(11)
resultat = array(11, 02, 05, 08)

Avatar du membre
Mammouth du PHP | 1609 Messages

11 mai 2015, 15:53

Salut, une façon de faire :
function get_monthes($month)
{
  $monthes = array($month);
  for($i = 1; $i < 4; $i++) {
    $_month = $month + 3 * $i;
    $_month = $_month > 12 ? $_month - 12 : $_month;
    $_month = $_month < 10 ? "0$_month" : $_month;
	
    $monthes[] = $_month;
  }

  return $monthes;
}

print_r(get_monthes('01'));/* Array ( [0] => 01 [1] => 04 [2] => 07 [3] => 10 ) */
print_r(get_monthes('04'));/* Array ( [0] => 04 [1] => 07 [2] => 10 [3] => 01 ) */
print_r(get_monthes('08'));/* Array ( [0] => 08 [1] => 11 [2] => 02 [3] => 05 ) */
print_r(get_monthes('11'));/* Array ( [0] => 11 [1] => 02 [2] => 05 [3] => 08 ) */
Développeur web depuis + de 20 ans

Eléphanteau du PHP | 13 Messages

11 mai 2015, 15:56

Merci Saian :)

Mammouth du PHP | 571 Messages

11 mai 2015, 16:31

autre solution:
pour revenir au 1er mois lorsque le mois en cours est supérieur à 9, tu peux calculer (mois+3) modulo 12:
function get_monthes($month)
{
  $monthes = array($month);
  for($i = 1; $i < 4; $i++) {
      $_month = 12+($month + 3* ( $i-12))%12;	
    $monthes[] = $_month;
  }

  return $monthes;
}

print_r(get_monthes('01'));
Une autre variante: utiliser DateInterval pour itérer tous les 3 mois
$debut=date_create('2015-05-11');
  $fin = clone $debut;
 $fin = $fin->modify( '+12 month' );//ajout de 12 mois à la date debut

 $interval = new DateInterval('P3M');//incrément de 3
 $periode = new DatePeriod($debut, $interval ,$fin);
 foreach($periode as $date){
     $monthes[] =date_format($date,"Y-m") ;
  echo 'mois trim = ', date_format($date,"Y-m") , "<br>";
 }
print_r($monthes);

Eléphanteau du PHP | 13 Messages

18 mai 2015, 11:16

Merci pour ton aide egalement yann18, je suis resté sur la première réponse qui marche au poil :) du coup je peux enfin générer des interventions trimestrielle à mes collègues :p

Bonne journée ;)