Zum Beispiel ergibt der 31. Januar + 1 Monat den 2. März (Schaltjahr)
oder den 3. März (normales Jahr).
<?php
echo "Normales Jahr:\n"; // Februar hat 28 Tage
$dt = new DateTimeImmutable("2015-01-31 00:00:00", new DateTimeZone("America/New_York"));
echo "Beginn: ", $dt->format("Y-m-d H:i:s P"), PHP_EOL;
$dt = $dt->modify("+1 month");
echo "Ende: ", $dt->format("Y-m-d H:i:s P"), PHP_EOL;
echo "Schaltjahr:\n"; // Februar hat 29 Tage
$dt = new DateTimeImmutable("2016-01-31 00:00:00", new DateTimeZone("America/New_York"));
echo "Beginn: ", $dt->format("Y-m-d H:i:s P"), PHP_EOL;
$dt = $dt->modify("+1 month");
echo "Ende: ", $dt->format("Y-m-d H:i:s P"), PHP_EOL;
?>
Das oben gezeigte Beispiel erzeugt folgende Ausgabe:
Normales Jahr:
Beginn: 2015-01-31 00:00:00 -05:00
Ende: 2015-03-03 00:00:00 -05:00
Schaltjahr:
Beginn: 2016-01-31 00:00:00 -05:00
Ende: 2016-03-02 00:00:00 -05:00
Um den letzten Tag des nächsten Monats zu erhalten (d.h. um den Überlauf
zu verhindern), gibt es das Format last day of
.
<?php
echo "Normales Jahr:\n"; // Februar hat 28 Tage
$dt = new DateTimeImmutable("2015-01-31 00:00:00", new DateTimeZone("America/New_York"));
echo "Beginn: ", $dt->format("Y-m-d H:i:s P"), PHP_EOL;
$dt = $dt->modify("last day of next month");
echo "Ende: ", $dt->format("Y-m-d H:i:s P"), PHP_EOL;
echo "Schaltjahr:\n"; // Februar hat 29 Tage
$dt = new DateTimeImmutable("2016-01-31 00:00:00", new DateTimeZone("America/New_York"));
echo "Beginn: ", $dt->format("Y-m-d H:i:s P"), PHP_EOL;
$dt = $dt->modify("last day of next month");
echo "Ende: ", $dt->format("Y-m-d H:i:s P"), PHP_EOL;
?>
Das oben gezeigte Beispiel erzeugt folgende Ausgabe:
Normales Jahr:
Beginn: 2015-01-31 00:00:00 -05:00
Ende: 2015-02-28 00:00:00 -05:00
Schaltjahr:
Beginn: 2016-01-31 00:00:00 -05:00
Ende: 2016-02-29 00:00:00 -05:00