Signatur
Beschreibung
date_add() ist die prozedurale Entsprechung der Methode DateTime::add(). Sie nimmt ein bestehendes DateTime-Objekt und addiert einen durch DateInterval definierten Zeitraum – also eine beliebige Kombination aus Jahren, Monaten, Tagen, Stunden, Minuten und Sekunden.
Das übergebene DateTime-Objekt wird direkt modifiziert (in-place). Die Funktion gibt dasselbe Objekt zurück, was das Verketten von Operationen ermöglicht. Wer unveränderliche Datumsobjekte benötigt, sollte stattdessen DateTimeImmutable zusammen mit DateTimeImmutable::add() verwenden.
Das DateInterval-Objekt kann bequem aus einer ISO-8601-Dauer-Zeichenkette (z. B. 'P1Y2M3DT4H5M6S') über new DateInterval() oder mittels DateInterval::createFromDateString() aus einem natürlichsprachlichen Ausdruck (z. B. '1 month') erstellt werden.
Diese Funktion eignet sich besonders für Berechnungen wie Ablaufdaten, Fristen oder Terminplanungen, bei denen Zeiträume auf ein bestehendes Datum aufgerechnet werden müssen.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $object Pflicht | DateTime | Das DateTime-Objekt, das verändert werden soll. Es wird direkt (mutierend) modifiziert. |
|
| $interval Pflicht | DateInterval | Der zu addierende Zeitraum als DateInterval-Objekt, z. B. erstellt mit new DateInterval('P30D') für 30 Tage. |
Rückgabewert
DateTime-Objekt zurück (dasselbe, das als $object übergeben wurde). Bei einem Fehler wird false zurückgegeben.Beispiele
30 Tage zu einem Datum addieren
<?php
$startdatum = new DateTime('2024-01-15');
$interval = new DateInterval('P30D'); // 30 Tage
date_add($startdatum, $interval);
echo $startdatum->format('Y-m-d');
// Ausgabe: 2024-02-14
Ablaufdatum eines Abonnements berechnen (1 Jahr, 3 Monate, 5 Tage)
<?php
$abschluss = new DateTime('2024-03-01');
// ISO-8601-Intervall: 1 Jahr, 3 Monate, 5 Tage
$laufzeit = new DateInterval('P1Y3M5D');
$ablauf = date_add($abschluss, $laufzeit);
echo 'Abo läuft ab am: ' . $ablauf->format('d.m.Y');
// Ausgabe: Abo läuft ab am: 06.06.2025
Natürlichsprachliches Intervall mit createFromDateString
<?php
$termin = new DateTime('2024-11-01 08:00:00');
$interval = DateInterval::createFromDateString('2 weeks + 3 days');
date_add($termin, $interval);
echo $termin->format('d.m.Y H:i:s');
// Ausgabe: 18.11.2024 08:00:00
// Wichtig · Fallstricke
Mutation: date_add() verändert das übergebene DateTime-Objekt direkt. Wenn das ursprüngliche Datum erhalten bleiben soll, muss es vorher geklont werden: $klon = clone $original;.
Unveränderliche Alternative: Für unveränderliche Datumsobjekte steht DateTimeImmutable::add() zur Verfügung, die ein neues Objekt zurückgibt, ohne das ursprüngliche zu verändern. Dies ist in modernem PHP oft die bevorzugte Vorgehensweise.
Monatsarithmetik: Beim Addieren von Monaten können Randfälle auftreten, z. B. ergibt der 31. Januar + 1 Monat den 3. März (in einem normalen Jahr) oder den 2. März (in einem Schaltjahr), da der Februar keine 31 Tage hat. Dieses Verhalten entspricht dem PHP-Standard und sollte bei der Terminplanung berücksichtigt werden.