Comment récuperer les mois entre deux dates

Résolu
msi79 Messages postés 509 Date d'inscription lundi 24 août 2009 Statut Membre Dernière intervention 2 mai 2023 - 11 janv. 2018 à 22:59
msi79 Messages postés 509 Date d'inscription lundi 24 août 2009 Statut Membre Dernière intervention 2 mai 2023 - 4 févr. 2018 à 21:59
Bonjour,
j'aimerai reccuperer les mois entre deux dates . j'ai chercher un peu partout j'ai rien trouvé .

exemple 05/06/2017 au 11/03/2018 qui va afficher comme mois :
06
07
09
10
11
12
01
02
.
merci de bien vouloir m'aider
A voir également:

6 réponses

jordane45 Messages postés 38144 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 avril 2024 344
Modifié le 12 janv. 2018 à 07:37
Bonjour

Tu pourrais ,par exemple, extraire le mois et l'année de tes deux dates puis à l'aide de deux boucles alimenter un array...
Tu n'as pas déjà traité un truc équivalent pour récupérer les jours dans une autre demande ?

Cordialement, 
Jordane                                                                 
0
jordane45 Messages postés 38144 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 avril 2024 344
12 janv. 2018 à 07:39
Tu pourrais aussi passer par des objets dates
Et dans une boucle incrémenter le mois pour aller de ta date de départ jusqu'à la date de fin.
La encore en alimentant un array ..

Je suis étonnée que tu n'aies pas trouvé d'exemple sur le net... Y'en a pourtant pas mal...
0
jordane45 Messages postés 38144 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 avril 2024 344
15 janv. 2018 à 00:53
Voici un code complet :
  <?php
  
  //activation des erreurs PHP
  error_reporting(E_ALL);
  ini_set('display_errors', TRUE);
  ini_set('display_startup_errors', TRUE);
  
  function debug($var,$title=""){
    echo "<br><b>".$title."</b>";
    echo "<pre>";
    print_r($var);
    echo "</pre>";
  }
  

  

   $date1 = new DateTime('2018-01-08');
  debug($date1,"date1");;
  
  $date2 = new DateTime('2018-11-05');
  debug($date2,"date2");

  $mois = array();
  $mois[] =  $date1->format('m');
  while($date1 <= $date2){
      $date1->add(new DateInterval("P1M"));
      $mois[] = $date1->format('m');
      
  }
  debug($mois,'Liste des mois');
?>


Ce qui donne :

date1

DateTime Object
(
[date] => 2018-01-08 00:00:00
[timezone_type] => 3
[timezone] => UTC
)


date2

DateTime Object
(
[date] => 2018-11-05 00:00:00
[timezone_type] => 3
[timezone] => UTC
)


Liste des mois

Array
(
[0] => 01
[1] => 02
[2] => 03
[3] => 04
[4] => 05
[5] => 06
[6] => 07
[7] => 08
[8] => 09
[9] => 10
[10] => 11
)


0
msi79 Messages postés 509 Date d'inscription lundi 24 août 2009 Statut Membre Dernière intervention 2 mai 2023 1
4 févr. 2018 à 00:59
Bonjour je reviens sur ce sujet.
je comprends pas pourquoi le mois 02 est omis.
ça affiche :

09
10
11
12
01
03
04

 debug($mois,'Liste des mois'); 
donne :
Array
(
[0] => 09
[1] => 10
[2] => 11
[3] => 12
[4] => 01
[5] => 03
[6] => 04
)

voici le code :
  echo  $date_entree = $row_LOC["date_entree"];

 $today = date("Y-m-d");
   function debug($var,$title=""){
    echo "<br><b>".$title."</b>";
    echo "<pre>";
    print_r($var);
    echo "</pre>";
  }
  $date1 = new DateTime($date_entree);//date_entree vaut 2018-09-30
  //debug($date1,"date1");;
  
  $date2 = new DateTime($today);//today vaut 2018-02-03
  //debug($date2,"date2");

  $mois = array();
  $mois[] =  $date1->format('m');
  while($date1 <= $date2){
      $date1->add(new DateInterval("P1M"));
      $mois[] = $date1->format('m');

  }
 debug($mois,'Liste des mois'); 
for($i=0, $size = count($mois); $i < $size; $i++):
echo $mois[$i].'<br>';
endfor;
0
jordane45 Messages postés 38144 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 avril 2024 344
4 févr. 2018 à 07:22
Inverse date1 et date2...
0
msi79 Messages postés 509 Date d'inscription lundi 24 août 2009 Statut Membre Dernière intervention 2 mai 2023 1
4 févr. 2018 à 17:08
Bonsoir ,
quand j'inverse ça me donne que le mois 02 et les autres .
voici ce que ça affiche .
Array
(
[0] => 02
)

au lieu de :
Array
(
[0] => 09
[1] => 10
[2] => 11
[3] => 12
[4] => 01
[5] => 03
[6] => 04
)

avec 02 compris
0
jordane45 Messages postés 38144 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 avril 2024 344
4 févr. 2018 à 17:45
Peux tu faire un debug de tes deux dates et nous montrer ce que ça donne ?
0
msi79 Messages postés 509 Date d'inscription lundi 24 août 2009 Statut Membre Dernière intervention 2 mai 2023 1
Modifié le 4 févr. 2018 à 17:55
oui j'essaie de comprendre pourquoi le mois 02 n'apparaît pas .
avec le code que tu m'as donné . celui la :
  <?php
  
  //activation des erreurs PHP
  error_reporting(E_ALL);
  ini_set('display_errors', TRUE);
  ini_set('display_startup_errors', TRUE);
  
  function debug($var,$title=""){
    echo "<br><b>".$title."</b>";
    echo "<pre>";
    print_r($var);
    echo "</pre>";
  }
  
  $date1 = new DateTime('2017-07-28');
  //debug($date1,"date1");
  
  $date2 = new DateTime('2018-11-05');
  //debug($date2,"date2");

  $mois = array();
  $mois[] =  $date1->format('Y-m');
  while($date1 <= $date2){
      $date1->add(new DateInterval("P1M"));
      $mois[] = $date1->format('Y-m');
      
  }
  debug($mois,'Liste des mois');
?>


lorsque
 $date1 = new DateTime('2017-07-28');  
depasse 28 c'est à dire quand je met
 $date1 = new DateTime('2017-07-29'); 
ou
 $date1 = new DateTime('2017-07-30); 


le mois 02 ne s'affiche pas

exemple pour
 $date1 = new DateTime('2017-07-28');  


date1
DateTime Object
(
[date] => 2017-07-28 00:00:00
[timezone_type] => 3
[timezone] => Europe/Paris
)

date2
DateTime Object
(
[date] => 2018-11-05 00:00:00
[timezone_type] => 3
[timezone] => Europe/Paris
)

date1
DateTime Object
(
[date] => 2017-07-29 00:00:00
[timezone_type] => 3
[timezone] => Europe/Paris
)

date2
DateTime Object
(
[date] => 2018-11-05 00:00:00
[timezone_type] => 3
[timezone] => Europe/Paris
)

Liste des mois
Array
(
[0] => 2017-07
[1] => 2017-08
[2] => 2017-09
[3] => 2017-10
[4] => 2017-11
[5] => 2017-12
[6] => 2018-01
[7] => 2018-03
[8] => 2018-04
[9] => 2018-05

Liste des mois
Array
(
[0] => 2017-07
[1] => 2017-08
[2] => 2017-09
[3] => 2017-10
[4] => 2017-11
[5] => 2017-12
[6] => 2018-01
[7] => 2018-02
[8] => 2018-03
[9] => 2018-04
[10] => 2018-05


et pour
 $date1 = new DateTime('2017-07-29'); 


date1
DateTime Object
(
[date] => 2017-07-29 00:00:00
[timezone_type] => 3
[timezone] => Europe/Paris
)

date2
DateTime Object
(
[date] => 2018-11-05 00:00:00
[timezone_type] => 3
[timezone] => Europe/Paris
)

Liste des mois
Array
(
[0] => 2017-07
[1] => 2017-08
[2] => 2017-09
[3] => 2017-10
[4] => 2017-11
[5] => 2017-12
[6] => 2018-01
[7] => 2018-03
[8] => 2018-04
[9] => 2018-05
0
jordane45 Messages postés 38144 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 avril 2024 344
4 févr. 2018 à 17:54
Essayes ça et regarde ce que ça donne !

<?php

  //-------------------------------------------------------------//
  // FONCTIONS
  //-------------------------------------------------------------// 
  /**
  * Fonction de debug
  */
  function debug($var,$title=""){
    echo "<br><b>".$title."</b>";
    echo "<pre>";
    print_r($var);
    echo "</pre>";
  }
  
  /**
  * $strDate1 (string) date au format Y-m-d
  * $strDate2 (string) date au format Y-m-d
  * return (array) liste des mois entre les deux dates
  */
  function getMonth($strDate1,$strDate2){
    $date1 = new DateTime($strDate1);
    debug($date1,"date1");
  
    $date2 = new DateTime($strDate2);
    debug($date2,"date2");
    
    if($date1 <= $date2){
      $arr_mois = array();
      $arr_mois[] =  $date1->format('m');
      while($date1 <= $date2){
        $date1->add(new DateInterval("P1M"));
        $arr_mois[] = $date1->format('m');
      }
    }else{
      echo "Erreur : Date1 est plus grand que Date2 !";
      $arr_mois = NULL;
    }
    return $arr_mois;
  }
  
  
  //-------------------------------------------------------------//
  // DEBUT DU CODE 
  //-------------------------------------------------------------//
   $date_entree = '2018-09-30';
   $today = date("Y-m-d");
  
  //Premier exemple avec les dates tel que tu les a mises :
   $mois = getMonth($date_entree,$today);  
   debug($mois,'Liste des mois'); 
   
   //second exemple avec les dates dans le "bon" ordre:
   $mois = getMonth($today,$date_entree);  
   debug($mois,'Liste des mois'); 
   

0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
jordane45 Messages postés 38144 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 avril 2024 344
Modifié le 4 févr. 2018 à 18:02
Je viens de comprendre....
Au mois de février... 28 jours (sauf années bissextiles )
Remplace la fonction de mon code précédent par :
function getMonth($strDate1,$strDate2){
    $date1 = new DateTime(date('Y-m-01',strtotime($strDate1)));
    debug($date1,"date1");
  
    $date2 = new DateTime(date('Y-m-01',strtotime($strDate2)));
    debug($date2,"date2");
    
    if($date1 <= $date2){
      $arr_mois = array();
      $arr_mois[] =  $date1->format('m');
      while($date1 < $date2){
        $date1->add(new DateInterval("P1M"));
        $arr_mois[] = $date1->format('m');
      }
    }else{
      echo "Erreur : Date1 est plus grand que Date2 !";
      $arr_mois = NULL;
    }
    return $arr_mois;
  }


0
msi79 Messages postés 509 Date d'inscription lundi 24 août 2009 Statut Membre Dernière intervention 2 mai 2023 1
4 févr. 2018 à 18:14
je sais plus comment récupérer et afficher mes mois.

j'ai juste remplacé et ça affiche erreur.
voici l'erreur :
Fatal error: Call to undefined function debug() in C:\wamp\www\GESTION_IMMOBILIER_GRACIA\tableau\liste_impayes_twins.php on line 30
Call Sta

voici mon code :
  <?php
  
  //activation des erreurs PHP
  error_reporting(E_ALL);
  ini_set('display_errors', TRUE);
  ini_set('display_startup_errors', TRUE);
  
function getMonth($strDate1,$strDate2){
    $date1 = new DateTime(date('Y-m-01',strtotime($strDate1)));
    debug($date1,"date1");
  
    $date2 = new DateTime(date('Y-m-01',strtotime($strDate2)));
    debug($date2,"date2");
    
    if($date1 <= $date2){
      $arr_mois = array();
      $arr_mois[] =  $date1->format('m');
      while($date1 < $date2){
        $date1->add(new DateInterval("P1M"));
        $arr_mois[] = $date1->format('m');
      }
    }else{
      echo "Erreur : Date1 est plus grand que Date2 !";
      $arr_mois = NULL;
    }
    return $arr_mois;
  }
  
  $date1 = new DateTime('2017-07-29');
  debug($date1,"date1");
  
  $date2 = new DateTime('2018-11-05');
  debug($date2,"date2");

  $mois = array();
  $mois[] =  $date1->format('Y-m');
  while($date1 <= $date2){
      $date1->add(new DateInterval("P1M"));
      $mois[] = $date1->format('Y-m');
      
  }
  debug($mois,'Liste des mois');
?>
0
jordane45 Messages postés 38144 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 avril 2024 344
4 févr. 2018 à 18:51
Et tu as fais quoi de la fonction debug ??
  /**
  * Fonction de debug
  */
  function debug($var,$title=""){
    echo "<br><b>".$title."</b>";
    echo "<pre>";
    print_r($var);
    echo "</pre>";
  }
  
0
msi79 Messages postés 509 Date d'inscription lundi 24 août 2009 Statut Membre Dernière intervention 2 mai 2023 1
4 févr. 2018 à 20:50
Toujours pas de mois 02
voici le debug :

date1
DateTime Object
(
[date] => 2017-07-29 00:00:00
[timezone_type] => 3
[timezone] => Europe/Paris
)

date2
DateTime Object
(
[date] => 2018-11-05 00:00:00
[timezone_type] => 3
[timezone] => Europe/Paris
)

Liste des mois
Array
(
[0] => 2017-07
[1] => 2017-08
[2] => 2017-09
[3] => 2017-10
[4] => 2017-11
[5] => 2017-12
[6] => 2018-01
[7] => 2018-03
[8] => 2018-04
[9] => 2018-05
[10] => 2018-06

voici mon code :
  <?php
  
  //activation des erreurs PHP
  error_reporting(E_ALL);
  ini_set('display_errors', TRUE);
  ini_set('display_startup_errors', TRUE);
 /**
  * Fonction de debug
  */
  function debug($var,$title=""){
    echo "<br><b>".$title."</b>";
    echo "<pre>";
    print_r($var);
    echo "</pre>";
  }  
function getMonth($strDate1,$strDate2){
    $date1 = new DateTime(date('Y-m-01',strtotime($strDate1)));
    debug($date1,"date1");
  
    $date2 = new DateTime(date('Y-m-01',strtotime($strDate2)));
    debug($date2,"date2");
    
    if($date1 <= $date2){
      $arr_mois = array();
      $arr_mois[] =  $date1->format('m');
      while($date1 < $date2){
        $date1->add(new DateInterval("P1M"));
        $arr_mois[] = $date1->format('m');
      }
    }else{
      echo "Erreur : Date1 est plus grand que Date2 !";
      $arr_mois = NULL;
    }
    return $arr_mois;
  }
  
  $date1 = new DateTime('2017-07-29');
  debug($date1,"date1");
  
  $date2 = new DateTime('2018-11-05');
  debug($date2,"date2");

  $mois = array();
  $mois[] =  $date1->format('Y-m');
  while($date1 <= $date2){
      $date1->add(new DateInterval("P1M"));
      $mois[] = $date1->format('Y-m');
      
  }
  debug($mois,'Liste des mois');
?>
0
jordane45 Messages postés 38144 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 avril 2024 344
4 févr. 2018 à 21:04
Colle ceci EXACTEMENT comme ça sans rien toucher d'autre :

<?php

  //-------------------------------------------------------------//
  // FONCTIONS
  //-------------------------------------------------------------// 
  /**
  * Fonction de debug
  */
  function debug($var,$title=""){
    echo "<br><b>".$title."</b>";
    echo "<pre>";
    print_r($var);
    echo "</pre>";
  }
  
  /**
  * $strDate1 (string) date au format Y-m-d
  * $strDate2 (string) date au format Y-m-d
  * return (array) liste des mois entre les deux dates
  */
  function getMonth($strDate1,$strDate2){
    $date1 = new DateTime(date('Y-m-01',strtotime($strDate1)));
    debug($date1,"date1");
  
    $date2 = new DateTime(date('Y-m-01',strtotime($strDate2)));
    debug($date2,"date2");
    
    if($date1 <= $date2){
      $arr_mois = array();
      $arr_mois[] =  $date1->format('m');
      while($date1 < $date2){
        $date1->add(new DateInterval("P1M"));
        $arr_mois[] = $date1->format('m');
      }
    }else{
      echo "Erreur : Date1 est plus grand que Date2 !";
      $arr_mois = NULL;
    }
    return $arr_mois;
  }
  
  
  //-------------------------------------------------------------//
  // DEBUT DU CODE 
  //-------------------------------------------------------------//
   $date_entree = '2018-09-30';
   $today = '2017-07-29';
  
  
   //second exemple avec les dates dans le "bon" ordre:
   $mois = getMonth($today,$date_entree);  
   debug($mois,'Liste des mois'); 
    
   
?>


Tu vas obtenir :

date1

DateTime Object
(
[date] => 2017-07-01 00:00:00
[timezone_type] => 3
[timezone] => UTC
)


date2

DateTime Object
(
[date] => 2018-09-01 00:00:00
[timezone_type] => 3
[timezone] => UTC
)


Liste des mois

Array
(
[0] => 07
[1] => 08
[2] => 09
[3] => 10
[4] => 11
[5] => 12
[6] => 01
[7] => 02
[8] => 03
[9] => 04
[10] => 05
[11] => 06
[12] => 07
[13] => 08
[14] => 09
)


0
msi79 Messages postés 509 Date d'inscription lundi 24 août 2009 Statut Membre Dernière intervention 2 mai 2023 1
4 févr. 2018 à 21:59
ça fonctionne . merci beaucoup
0
Rejoignez-nous