Start · Sprachen · PHP · Referenz · date_add

date_add

Funktion

Addiert ein <code>DateInterval</code>-Objekt zu einem <code>DateTime</code>-Objekt und gibt das modifizierte Objekt zurück.

seit PHP 5.3.0 Kategorie: date

Signatur

date_add(DateTime $object, DateInterval $interval): DateTime|false

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

Typ
DateTime|false
Beschreibung
Gibt das modifizierte 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
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
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
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.