Comment récuperer les mois entre deux dates

Résolu
msi79
Messages postés
500
Date d'inscription
lundi 24 août 2009
Statut
Membre
Dernière intervention
13 avril 2021
- 11 janv. 2018 à 22:59
msi79
Messages postés
500
Date d'inscription
lundi 24 août 2009
Statut
Membre
Dernière intervention
13 avril 2021
- 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
35417
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
17 mai 2022
356
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
35417
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
17 mai 2022
356
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
35417
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
17 mai 2022
356
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
500
Date d'inscription
lundi 24 août 2009
Statut
Membre
Dernière intervention
13 avril 2021
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
35417
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
17 mai 2022
356
4 févr. 2018 à 07:22
Inverse date1 et date2...
0
msi79
Messages postés
500
Date d'inscription
lundi 24 août 2009
Statut
Membre
Dernière intervention
13 avril 2021
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
35417
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
17 mai 2022
356
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
500
Date d'inscription
lundi 24 août 2009
Statut
Membre
Dernière intervention
13 avril 2021
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
35417
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
17 mai 2022
356
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
35417
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
17 mai 2022
356
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;
  }


Cordialement, 
Jordane                                                                 
0
msi79
Messages postés
500
Date d'inscription
lundi 24 août 2009
Statut
Membre
Dernière intervention
13 avril 2021
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
35417
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
17 mai 2022
356
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
500
Date d'inscription
lundi 24 août 2009
Statut
Membre
Dernière intervention
13 avril 2021
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
35417
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
17 mai 2022
356
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
500
Date d'inscription
lundi 24 août 2009
Statut
Membre
Dernière intervention
13 avril 2021
1
4 févr. 2018 à 21:59
ça fonctionne . merci beaucoup
0