Comment récuperer les mois entre deux dates [Résolu]

msi79 425 Messages postés lundi 24 août 2009Date d'inscription 11 juillet 2018 Dernière intervention - 11 janv. 2018 à 22:59 - Dernière réponse : msi79 425 Messages postés lundi 24 août 2009Date d'inscription 11 juillet 2018 Dernière intervention
- 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
Afficher la suite 

Votre réponse

15 réponses

jordane45 21720 Messages postés mercredi 22 octobre 2003Date d'inscriptionModérateurStatut 23 juillet 2018 Dernière intervention - Modifié par jordane45 le 12/01/2018 à 07:37
0
Merci
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                                                                 
jordane45 21720 Messages postés mercredi 22 octobre 2003Date d'inscriptionModérateurStatut 23 juillet 2018 Dernière intervention - 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...
Commenter la réponse de jordane45
jordane45 21720 Messages postés mercredi 22 octobre 2003Date d'inscriptionModérateurStatut 23 juillet 2018 Dernière intervention - 15 janv. 2018 à 00:53
0
Merci
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
)


Commenter la réponse de jordane45
msi79 425 Messages postés lundi 24 août 2009Date d'inscription 11 juillet 2018 Dernière intervention - 4 févr. 2018 à 00:59
0
Merci
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;
jordane45 21720 Messages postés mercredi 22 octobre 2003Date d'inscriptionModérateurStatut 23 juillet 2018 Dernière intervention - 4 févr. 2018 à 07:22
Inverse date1 et date2...
msi79 425 Messages postés lundi 24 août 2009Date d'inscription 11 juillet 2018 Dernière intervention - 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
jordane45 21720 Messages postés mercredi 22 octobre 2003Date d'inscriptionModérateurStatut 23 juillet 2018 Dernière intervention - 4 févr. 2018 à 17:45
Peux tu faire un debug de tes deux dates et nous montrer ce que ça donne ?
msi79 425 Messages postés lundi 24 août 2009Date d'inscription 11 juillet 2018 Dernière intervention - 4 févr. 2018 à 17:54
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
Commenter la réponse de msi79
jordane45 21720 Messages postés mercredi 22 octobre 2003Date d'inscriptionModérateurStatut 23 juillet 2018 Dernière intervention - 4 févr. 2018 à 17:54
0
Merci
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'); 
   

Commenter la réponse de jordane45
jordane45 21720 Messages postés mercredi 22 octobre 2003Date d'inscriptionModérateurStatut 23 juillet 2018 Dernière intervention - Modifié par jordane45 le 4/02/2018 à 18:02
0
Merci
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                                                                 
msi79 425 Messages postés lundi 24 août 2009Date d'inscription 11 juillet 2018 Dernière intervention - 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');
?>
jordane45 21720 Messages postés mercredi 22 octobre 2003Date d'inscriptionModérateurStatut 23 juillet 2018 Dernière intervention - 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>";
  }
  
msi79 425 Messages postés lundi 24 août 2009Date d'inscription 11 juillet 2018 Dernière intervention - 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');
?>
Commenter la réponse de jordane45
jordane45 21720 Messages postés mercredi 22 octobre 2003Date d'inscriptionModérateurStatut 23 juillet 2018 Dernière intervention - 4 févr. 2018 à 21:04
0
Merci
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
)


msi79 425 Messages postés lundi 24 août 2009Date d'inscription 11 juillet 2018 Dernière intervention - 4 févr. 2018 à 21:59
ça fonctionne . merci beaucoup
Commenter la réponse de jordane45

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.