Mit Datum rechnen in PHP – DateTimeImmutable
„In 14 Tagen" oder „wie viele Tage bis zur Frist?" – mit DateTimeImmutable rechnest du sicher mit Datum und Zeit, ohne dass sich ein Objekt heimlich unter der Hand ändert.
Datum als Unix-Timestamp mit + 606024*14 zu addieren, geht bei Sommerzeit und Monatsgrenzen schief. PHP bringt mit DateTimeImmutable eine saubere Datums-Arithmetik – und das „Immutable" verhindert eine häufige Fehlerquelle.
Rechnen mit Intervallen
modify() und add() geben ein neues Objekt zurück; das Original bleibt unverändert:
$heute = new DateTimeImmutable('today');
$frist = $heute->modify('+14 days');
$naechsterMonat = $heute->modify('first day of next month');
echo $frist->format('d.m.Y'); // z. B. 31.07.2026Warum „Immutable"?
Das klassische DateTime verändert sich selbst bei modify() – ein subtiler Bug, wenn du dasselbe Objekt mehrfach nutzt:
$d = new DateTime('2026-07-17');
$in7 = $d->modify('+7 days'); // ändert AUCH $d!
// $d ist jetzt ebenfalls der 24.07. – überraschend
$i = new DateTimeImmutable('2026-07-17');
$in7 = $i->modify('+7 days'); // $i bleibt der 17.07.Nimm im Zweifel immer DateTimeImmutable.
Differenz zwischen zwei Daten
diff() liefert ein DateInterval mit fertig aufgeschlüsselten Tagen:
$start = new DateTimeImmutable('2026-07-17');
$ende = new DateTimeImmutable('2026-08-01');
$diff = $start->diff($ende);
echo $diff->days; // 15 (Gesamttage)
echo $diff->format('%a Tage'); // "15 Tage"Ein Tipp für die Praxis: Rechne intern in UTC und formatiere erst bei der Ausgabe in die lokale Zeitzone (setTimezone(new DateTimeZone('Europe/Berlin'))). Dann bleiben dir Sommerzeit-Verschiebungen erspart.
Korrekte Datums- und Fristenlogik steckt in jedem Buchungs- oder Rechnungssystem. Solche Backends baue ich – schau auf bymw.de.
Quellen
Du brauchst mehr als ein Snippet?
Ich entwickle Android-Apps in Kotlin und moderne Websites für Selbstständige und kleine Unternehmen — von der ersten Idee bis zum Release.
Projekt anfragen →Verwandte Snippets
Beträge und Zahlen in PHP formatieren – number_format, sprintf und Intl
1234.5 ist keine Anzeige, sondern ein Wert. Auf der Rechnung soll 1.234,50 € stehen, in der API 1234.50 und im Dateinamen 1234-50. Drei Aufgaben, drei Werkzeuge – und ein Fehler, den fast jeder einmal macht.
Benannte Argumente in PHP 8 – Schluss mit true, false, null, true
Ein Aufruf wie erstelle($a, true, false, null, true) sagt nichts darüber, was die Wahrheitswerte bedeuten. Mit benannten Argumenten steht es im Aufruf – und optionale Parameter lassen sich überspringen.
Reguläre Ausdrücke in PHP – benannte Gruppen statt $m[3]
Ein Treffer-Array aus Zahlen liest sich nach zwei Wochen wie eine Geheimschrift. Benannte Gruppen geben jedem Teil einen Namen – und preg_replace_callback ersetzt damit Dinge, die kein einfacher Ersetzungsstring kann.