Vous pouvez utiliser DateTime::modify
comme ceci :
$date = new DateTime('2010-12-11');
$date->modify('+1 month');
Voir les documentations :
https://php.net/manual/en/datetime.modify.php
https://php.net/manual/en/class.datetime.php
MISE À JOUR janvier 2021 : correction des erreurs soulevées par les commentaires
Cette solution pose quelques problèmes pour les mois à 31 jours comme le mois de mai, etc.
Exemple : ce saut va du 31 mai au 1er juillet, ce qui est incorrect.
Pour corriger cela, vous pouvez créer cette fonction personnalisée
function addMonths($date,$months){
$init=clone $date;
$modifier=$months.' months';
$back_modifier =-$months.' months';
$date->modify($modifier);
$back_to_init= clone $date;
$back_to_init->modify($back_modifier);
while($init->format('m')!=$back_to_init->format('m')){
$date->modify('-1 day') ;
$back_to_init= clone $date;
$back_to_init->modify($back_modifier);
}
}
Alors vous pouvez l'utiliser comme ça :
$date = new DateTime('2010-05-31');
addMonths($date, 1);
print_r($date);
//DateTime Object ( [date] => 2010-06-30 00:00:00.000000 [timezone_type] => 3 [timezone] => Europe/Berlin )
Cette solution a été trouvée sur PHP.net par jenspj : https://www.php.net/manual/fr/datetime.modify.php#107592