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

Fermé
le_joker_fou Messages postés 764 Date d'inscription mercredi 5 août 2009 Statut Membre Dernière intervention 7 août 2014 - Modifié par le_joker_fou le 27/01/2011 à 11:08
le_joker_fou Messages postés 764 Date d'inscription mercredi 5 août 2009 Statut Membre Dernière intervention 7 août 2014 - 27 janv. 2011 à 14:33
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.
A voir également:

2 réponses

Mihawk Messages postés 4315 Date d'inscription mercredi 29 mars 2006 Statut Contributeur Dernière intervention 6 janvier 2015 846
27 janv. 2011 à 11:08
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
le_joker_fou Messages postés 764 Date d'inscription mercredi 5 août 2009 Statut Membre Dernière intervention 7 août 2014 239
Modifié par le_joker_fou le 27/01/2011 à 14:39
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