Was ist 31.1. + ein Monat?

Was ist der 31.1. + ein Monat? Den 31.2. gibt es nicht also ist es der 27.2./28.2. oder ein Tag im März?
Von der reinen menschlichen Logik wäre der Xte Tag des Monats der selbe oder der nächstgelegenste mögliche Tag. Aber nie der Tag des nächsten Monats. Wie beim ISO-Kalenderjahr geht man vom Gefühl nicht davon aus dass das neue (Kalender-)Jahr im alten (gefühlten) Jahr anfängt.


/**
* @param DateTime $date
* @param int $months
*
* @return DateTime
* @throws Exception
*/
function addMonths(DateTime $date, $months = 0) {
$firstDayDate = clone $date;
$dayOfMonth = $firstDayDate->format('d');
$firstInterval = new DateInterval('P' . ($dayOfMonth - 1) .'D');
$firstDayDate->sub($firstInterval);
$firstDayDate->add(new DateInterval('P' . $months . 'M'));
$maxDay = $firstDayDate->format('t');
if($dayOfMonth > $maxDay) {
$dayOfMonth = $maxDay;
}
$restoreIntervall = new DateInterval('P' . ($dayOfMonth - 1) . 'D');
$firstDayDate->add($restoreIntervall);
return $firstDayDate;
}


Damit wäre der 31.1. + 3 Monate der 30.4. weil immer im Context eines bestimmten Monats gerechnet wird und dieser Context nicht verlassen werden darf.
User annonyme 2020-09-24 22:54

write comment:
Two + = 5

Möchtest Du AdSense-Werbung erlauben und mir damit helfen die laufenden Kosten des Blogs tragen zu können?