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

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

Messages postés
23253
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
16 novembre 2018
- 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                                                                 
Messages postés
23253
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
16 novembre 2018
- 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
Messages postés
23253
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
16 novembre 2018
- 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
Messages postés
455
Date d'inscription
lundi 24 août 2009
Dernière intervention
9 octobre 2018
- 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;
Messages postés
23253
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
16 novembre 2018
- 4 févr. 2018 à 07:22
Inverse date1 et date2...
Messages postés
455
Date d'inscription
lundi 24 août 2009
Dernière intervention
9 octobre 2018
- 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
Messages postés
23253
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
16 novembre 2018
- 4 févr. 2018 à 17:45
Peux tu faire un debug de tes deux dates et nous montrer ce que ça donne ?
Messages postés
455
Date d'inscription
lundi 24 août 2009
Dernière intervention
9 octobre 2018
- 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
Messages postés
23253
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
16 novembre 2018
- 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
Messages postés
23253
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
16 novembre 2018
- 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                                                                 
Messages postés
455
Date d'inscription
lundi 24 août 2009
Dernière intervention
9 octobre 2018
- 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');
?>
Messages postés
23253
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
16 novembre 2018
- 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>";
  }
  
Messages postés
455
Date d'inscription
lundi 24 août 2009
Dernière intervention
9 octobre 2018
- 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
Messages postés
23253
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
16 novembre 2018
- 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
)


Messages postés
455
Date d'inscription
lundi 24 août 2009
Dernière intervention
9 octobre 2018
- 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.