Problème avec le mois de Février - PHP

le_joker_fou Messages postés 765 Date d'inscription   Statut Membre Dernière intervention   -  
le_joker_fou Messages postés 765 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour,

Mon problème est le suivant : je dois incrémenter une date de 1 mois pour cela j'utilise le bout de code suivant :

//Pour le mois de janvier $date_valid_old = 2011-01-31 

$date_valide = date('Y-m-d',strtotime("+1 month", strtotime($date_valid_old))); 


Or le mois de février arrivant mon calcul ci-dessus me renvoi comme valeur

// $date_valide = 2011-03-03


Je voudrais que le calcul me renvois

// $date_valide = 2011-02-28 


Avez vous une solution ou une idée qui ne nécessite par un long traitement d'analyse du mois de gestion du nombre de jour du mois précédent, etc...?

Merci.

2 réponses

  1. Mihawk Messages postés 4753 Statut Contributeur 846
     
    Hello,

    Je ne suis pas sûr que tu y coupes... Le traitement automatique est justement celui-ci : faire automatiquement basculer au mois suivant si tu tapes une date inexistante.
    0
  2. le_joker_fou Messages postés 765 Date d'inscription   Statut Membre Dernière intervention   239
     
    Bon j'ai trouver la solution (j'aime pas mais bon ) :

    <?php    
     //On additione notre mois à la date_valide    
     $date_valide_tmp = date('Y-m-d',strtotime("+1 month", strtotime($date_valide)));    
         
     //On récupère les informations propres et on regarde le nombre de jour que compose le nouveau mois    
     list($year, $month, $day) = explode('-',$date_valide_tmp);    
     $nb_jour = date('t',mktime(0,0,0,$month, $day, $year));    
         
     //Si les jours du nouveau sont inférieur à 4 (début du mois) ou a été trop loin. Maximum d'écart 3 => 28 Février + 1 mois = 3 Mars    
     if($day<4)    
     {    
      //On soustrait les jour du début du mois pour nous rendre à la fin du mois précédent    
      $date_valide = date('Y-m-d',strtotime("-$day day", strtotime($date_valide_tmp)));    
     }    
     //Sinon si le nombre de jour est inférieur ou égale au nombre de jour du mois en cours    
     else if($day <= $nb_jour)    
     {    
      //On calcul la différence    
      $difference = $nb_jour - $day;    
          
      //Puis on l'ajoute à la date en cours.    
      $date_valide = date('Y-m-d',strtotime("+$difference day", strtotime($date_valide_tmp)));    
     }    
    ?>    
    


    Avec ce code tant que les jours de $date_valide sont supérieur à 3 on projettera la date au dernier jour du mois en cours.

    exemple :
    --> 03-03-2011 + 1 mois = 31-03-2011
    --> 05-03-2001 + 1 mois = 31-04-2011

    Si vous voulez tester sur une année complète :

    <?php    
     $date_valide = "2011-01-04";    
         
     for($i=1;$i<=12;$i++)    
     {    
      echo '<br/>'."----------------------------------------------".'<br/>';    
          
      echo $date_valide.'<br/>';    
          
      $date_valide_tmp = date('Y-m-d',strtotime("+1 month", strtotime($date_valide)));    
          
      list($year, $month, $day) = explode('-',$date_valide_tmp);    
      $nb_jour = date('t',mktime(0,0,0,$month, $day, $year));    
          
      if($day<4)    
      {    
       $date_valide = date('Y-m-d',strtotime("-$day day", strtotime($date_valide_tmp)));    
      }    
      else if($day <= $nb_jour)    
      {    
       $difference = $nb_jour - $day;    
       $date_valide = date('Y-m-d',strtotime("+$difference day", strtotime($date_valide_tmp)));    
      }    
          
      echo $date_valide.'<br/>';    
     }    
    ?>    
    


    Have Fun ;)
    0