Comprendre l'anomalie PHP DateTime::modify avec les mois
La fonction PHP DateTime::modify, lorsqu'elle est utilisée pour ajouter ou soustraire des mois, peut entraîner des résultats inattendus. La raison en est le comportement inhérent des mécanismes de manipulation de dates de PHP.
Pourquoi ce n'est pas un bug
En interne, lors de l'ajout ou de la soustraction de mois, PHP incrémente ou décrémente le numéro du mois (par exemple, 1 mois augmenterait le numéro du mois de un). Cependant, il ne vérifie pas le nombre réel de jours dans le mois résultant. Par conséquent, si le mois obtenu comporte moins de jours que la date d'origine, PHP corrige automatiquement la date en comptant les jours restants à partir du premier du mois suivant.
Considérez l'exemple fourni dans la question :
$date = new DateTime('2000-12-31'); $date->modify('+1 month'); echo $date->format('Y-m-d') . "\n"; // Output: 2001-01-31 $date->modify('+1 month'); echo $date->format('Y-m-d') . "\n"; // Output: 2001-03-03
Dans cet exemple, l'ajout d'un mois donne initialement une date du 31/02/2001. Cependant, comme février 2001 ne compte que 28 jours, PHP corrige automatiquement la date au 3 mars, qui compte 31 jours.
Solutions pour le comportement souhaité
Pour obtenir le comportement attendu où 1 mois avance la date au premier du mois suivant, vous pouvez utiliser ce qui suit stratégies :
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!