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 -
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 :
Or le mois de février arrivant mon calcul ci-dessus me renvoi comme valeur
Je voudrais que le calcul me renvois
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.
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:
- Problème avec le mois de Février - PHP
- Retraite fevrier - Guide
- Easy php - Télécharger - Divers Web & Internet
- Youtube premium 2 mois gratuit - Accueil - TV & Vidéo
- 600h en mois - Forum Bureautique
- Darkiworld nouvelle adresse fevrier 2025 - Forum Services en ligne
2 réponses
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.
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.
Bon j'ai trouver la solution (j'aime pas mais bon ) :
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 :
Have Fun ;)
<?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 ;)