PHP: nächsten Monatsultimo ausgeben

Zu einem bestimmten Datum einen Monat dazuzählen sollte eigentlich eine einfache Übung sein. Es gibt aber Fallstricke.

Die Lösung auf stackoverflow.com "increment date by one month" ist leider Fehleranfällig bei bestimmten Daten.

$time = strtotime("2010-12-11");
$final = date("Y-m-d", strtotime("+1 month", $time));
//$final == "2011-01-11"

Die Funktion strtotime("+1 month", $time) fügt nämlich einfach 2678400 Sekunden (31 Tage) hinzu.

Das kann unter Umständen zu Problemen führen. Die meisten Menschen erwarten beim Hinzufügen eines Monats zum 28. Februar als Rückgabewert eher den 28. März.

Noch schlimmer ist es, wenn das nächste Monat/der nächste Monatsultimo ausgerechnet werden soll.

Würden wir als Ausgangsdatum den 31. Mai 2014 nehmen wo würde uns obige Funktion als Ergebnis den 1. Juli 2014 zurückgeben anstatt dem erwarteten Juni.

$time = strtotime("2014-05-31");
$final = date("Y-m-01", strtotime("+1 month", $time));
//$final == "2014-07-01" (=Monat Juli)

Um also den ächsten Monat zu bekommen müsste man ein Konstrukt wie folgendes bemühen:

$time = strtotime("2014-05-31");
$final = date("Y-m-01",strtotime(date("Y-m-01", $time)) + ((date("t", $time)+1)*60*60*24));
//$final == "2014-06-01" (Monat Juni)

Vielleicht steht deshalb auch in der PHP-Doku zu DateTime::add folgender Hinweis: "Beware when adding months" :-D

Datum: 09.05.2014

Der Artikel hat dir gefallen? Dann bitte teile ihn:
(Die Buttons sind absichtlich ausgegraut, um deine Privatspähre zu schützen - Ein Klick darauf und sie werden aktiv)