Signatur
Beschreibung
date_modify() ist der prozedurale Stil der Methode DateTime::modify() und verändert ein bestehendes DateTime-Objekt durch einen relativen Modifikator-String. Der Modifikator folgt den Regeln des PHP-Datumsformats und kann Ausdrücke wie +1 day, -2 weeks, next monday oder last day of next month enthalten.
Die Funktion verändert das übergebene Objekt direkt (in-place) und gibt es zusätzlich zurück. Dies unterscheidet sie von der unveränderlichen Variante DateTimeImmutable, bei der modify() immer ein neues Objekt zurückgibt.
Typische Einsatzbereiche sind Datumsberechnungen wie das Ermitteln des nächsten Wochentags, das Verschieben eines Termins um eine bestimmte Zeitspanne oder das Navigieren zu Monatsanfang/-ende. Der Modifikator-String wird von der gleichen Engine geparst wie strtotime(), daher gelten dieselben Möglichkeiten und Einschränkungen.
Seit PHP 8.0 ist date_modify() ein Alias für DateTime::modify(). Für unveränderliche Datumsobjekte sollte stattdessen date_create_immutable() zusammen mit DateTimeImmutable::modify() verwendet werden.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $object Pflicht | DateTime | Das DateTime-Objekt, das verändert werden soll. Dieses Objekt wird direkt modifiziert. |
|
| $modifier Pflicht | string | Ein relativer Datumsausdruck wie '+1 day', 'next monday' oder 'last day of this month'. Wird von derselben Engine wie strtotime() interpretiert. |
Rückgabewert
DateTime-Objekt zurück (dasselbe Objekt, das übergeben wurde). Bei einem ungültigen Modifikator-String wird false zurückgegeben.Beispiele
Datum um eine Woche verschieben
<?php
$date = date_create('2024-03-15');
date_modify($date, '+1 week');
echo date_format($date, 'Y-m-d');
// Ausgabe: 2024-03-22
Letzten Tag des aktuellen Monats ermitteln
<?php
$date = date_create('2024-02-05');
date_modify($date, 'last day of this month');
echo date_format($date, 'Y-m-d');
// Ausgabe: 2024-02-29 (Schaltjahr 2024)
Mehrfache Modifikationen hintereinander
<?php
$date = date_create('2024-01-31');
// Nächsten Monat: Vorsicht beim Überrollen!
date_modify($date, '+1 month');
echo date_format($date, 'Y-m-d') . PHP_EOL;
// Besser: letzten Tag des nächsten Monats nutzen
$date2 = date_create('2024-01-31');
date_modify($date2, 'last day of next month');
echo date_format($date2, 'Y-m-d') . PHP_EOL;
// Wichtig · Fallstricke
Vorsicht bei Monatsüberrollungen: '+1 month' auf den 31. Januar angewendet ergibt den 2. März (in Nicht-Schaltjahren) oder den 1. März, da der 31. Februar nicht existiert und PHP das Datum automatisch in den nächsten Monat überschreibt. Für zuverlässige Monatsnavigation sollte 'last day of next month' oder 'first day of next month' verwendet werden.
In-place-Mutation: Da date_modify() das Objekt direkt verändert, sollte bei Bedarf eine Kopie mit clone erstellt werden, bevor die Modifikation angewendet wird. Alternativ bietet DateTimeImmutable::modify() ein unveränderliches Verhalten ohne Seiteneffekte.
Ungültige Modifikator-Strings geben false zurück; der Rückgabewert sollte daher geprüft werden, wenn der Modifikator aus Benutzereingaben stammt.