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
array_find, array_any und array_all in PHP 8.4 – Arrays durchsuchen ohne Schleife
„Gibt es einen inaktiven Eintrag?", „Sind alle bezahlt?", „Hol mir den ersten Treffer" – dafür hast du bisher eine foreach-Schleife mit break geschrieben. PHP 8.4 macht daraus je eine Zeile, die genau sagt, was sie meint.
First-Class-Callable-Syntax in PHP: aus strlen(...) wird ein echter Wert
Funktionen als Zeichenketten weiterzureichen – 'strlen', [$objekt, 'methode'] – hat nie jemand gemocht: kein Tippfehlerschutz, keine Sprungmarke in der IDE. Seit PHP 8.1 schreibst du drei Punkte und bekommst ein Closure-Objekt.
@layer in CSS: Kaskadenebenen statt !important-Wettrüsten
Irgendwann steht in jedem gewachsenen Stylesheet das erste !important – und ein halbes Jahr später das dreißigste. Mit @layer legst du die Reihenfolge einmal fest, und ab da gewinnt nicht mehr der längste Selektor, sondern die Ebene, die du bestimmt hast.