Navigation
 Startseite
 Fachbücher
 Anzeigenmarkt
 Forum
 Webmaster News
 Script Newsletter
 Kontakt
 Script Installation
 Php
 Php Tutorials
 Lernpfade
 Webhoster Vergleich
 Impressum

Community-Bereich
 kostenlos Registrieren
 Anmelden
 Benutzerliste

Script Datenbank
 Script Archiv
 Script Top 20
 Screenshots
 Testberichte

Suche
 

Unsere Php Scripts
 Counter Script
 Umfrage Script
 Bilder Upload Script
 Terminverwaltung
 Simple PHP Forum
 RSS Grabber

Tools und Generatoren
 .htpasswd Generator
 md5 Generator
 base64 Generator
 Markdown to HTML
 Colorpicker
 Unix timestamp Tool
 Unit Test Generator
 TLD Liste
 Webkatalog‑Verzeichnis

Hosterplus.de
Bekommen Sie Speicherplatz (Webspace), Domains und...
https://www.Hosterplus.de
Artfiles.de
Bietet Serviceorientierte Internetdienstleistungen...
https://www.Artfiles.de
 
 
 

PHP DatePeriod: Zeiträume in Schritten iterieren

Sie befinden sich: Home > Php Tutorial > PHP DatePeriod: Zeiträume i...

PHP DatePeriod: Zeiträume in Schritten iterieren
Eintrag am:
05.07.2026
Hits / Besucher:
17
Sprache:
  Deutsch
Tutorial Art:
eigenes
Eingetragen von:
 
Beschreibung

Wiederkehrende Termine, Wochenpläne oder Zahlungsfristen verlangen nach einer sauberen Iteration über einen Datumsbereich. PHP stellt dafür mit der Klasse DatePeriod einen eigenen Iterator bereit, der das lästige Hochzählen von Tagen komplett abnimmt. Die folgenden Abschnitte zeigen, wie ein DatePeriod aufgebaut wird und worauf es dabei ankommt.

Was ist die Klasse PHP DatePeriod?

Wer in PHP einen Wochenkalender, einen Schichtplan oder eine Liste von Zahlungsfristen aufbauen will, schreibt schnell eine Schleife mit mktime() oder strtotime(). Genau hier setzt PHP DatePeriod an: Die Klasse ist ein Iterator, der eine Folge von DateTimeImmutable-Objekten zwischen einem Startdatum, einem Intervall und einem Ende erzeugt. Das Ergebnis lässt sich elegant per foreach durchlaufen, ohne dass eine einzige Tag-Berechnung von Hand programmiert werden muss.

Illustration zum Tutorial: PHP DatePeriod: Zeiträume in Schritten iterieren

Bevor die drei Konstruktor-Varianten und die Optionen wie EXCLUDE_START_DATE folgen, lohnt sich ein Blick auf das eng verzahnte Zusammenspiel mit DateInterval.

Im Zentrum steht das Zusammenspiel mit DateInterval, das den Schritt zwischen zwei Iterationen beschreibt. Ein P1D bedeutet einen Tag, P1W eine Woche, P1M einen Monat. PHP DatePeriod kombiniert beide Bausteine zu einer kompakten und gut lesbaren Lösung für alle Aufgaben, bei denen ein Bereich in regelmäßigen Schritten abgelaufen werden soll.

Drei Wege, einen DatePeriod zu konstruieren

Die Klasse PHP DatePeriod bietet drei Konstruktor-Varianten, die sich in der Definition des Endes unterscheiden. Die erste Variante akzeptiert ein End-Datum, die zweite eine Anzahl an Wiederholungen, die dritte einen ISO-8601-konformen String.

<?php

$start = new DateTimeImmutable('2026-05-15');

/* Variante 1: Start, Intervall, End-Datum */
$bis = new DateTimeImmutable('2026-05-22');
$periode1 = new DatePeriod($start, new DateInterval('P1D'), $bis);

/* Variante 2: Start, Intervall, Anzahl Wiederholungen */
$periode2 = new DatePeriod($start, new DateInterval('P1W'), 4);

/* Variante 3: ISO-8601-String */
$periode3 = new DatePeriod('R3/2026-05-15/P1D');

Jede Variante hat ihre Berechtigung. Wer einen Wochen- oder Monatskalender bis zu einem festen Datum erzeugt, wird Variante 1 nutzen. Wer eine feste Anzahl wiederkehrender Termine wie "die nächsten 4 Sitzungen" plant, ist mit Variante 2 schneller. Variante 3 ist eher selten, eignet sich aber gut für Konfigurationen, die als Text in einer YAML- oder JSON-Datei stehen.

DatePeriod mit foreach iterieren

Sobald ein PHP DatePeriod-Objekt existiert, lässt es sich wie jedes andere iterierbare Objekt mit foreach durchlaufen. Pro Schritt liefert die Klasse ein DateTimeImmutable-Objekt, das man direkt mit format() ausgeben oder mit weiteren Methoden verändern kann.

<?php

$start = new DateTimeImmutable('2026-05-15');
$ende = new DateTimeImmutable('2026-05-22');
$interval = new DateInterval('P1D');

$periode = new DatePeriod($start, $interval, $ende);
foreach ($periode as $tag) {
echo $tag->format('Y-m-d') . "\n";
}
/* gibt 2026-05-15 bis 2026-05-21 aus */

Hier zeigt sich gleich die wichtigste Stolperfalle: Das End-Datum wird standardmäßig nicht mit ausgegeben. Ein DatePeriod von 2026-05-15 bis 2026-05-22 endet beim 21. Mai. Wer den letzten Tag mitnehmen will, muss die Option INCLUDE_END_DATE setzen oder das Ende manuell um einen Tag verschieben. Mehr dazu im nächsten Abschnitt.

Start- und End-Datum kontrollieren

Mit zwei Konstanten der Klasse PHP DatePeriod lassen sich die Randpunkte des Iterierens beeinflussen. EXCLUDE_START_DATE lässt den ersten Tag aus, INCLUDE_END_DATE (verfügbar ab PHP 8.2) nimmt den letzten Tag mit. Beide werden als drittes oder viertes Argument an den Konstruktor übergeben.

<?php

$start = new DateTimeImmutable('2026-05-15');
$ende = new DateTimeImmutable('2026-05-18');
$interval = new DateInterval('P1D');

$ohneStart = new DatePeriod(
$start, $interval, $ende,
DatePeriod::EXCLUDE_START_DATE
);
foreach ($ohneStart as $tag) {
echo $tag->format('Y-m-d') . "\n";
}
/* gibt 2026-05-16 und 2026-05-17 aus */

Die Kontrolle über Anfang und Ende ist wichtiger als sie auf den ersten Blick wirkt. In Buchungssystemen entscheidet sie, ob ein Mietzeitraum den Anreisetag einschließt, in Schichtplänen, ob die Übergabeschicht doppelt gerechnet wird. Wer die Option versäumt, hat schnell einen Tag zu viel oder zu wenig im Bericht.

Praxisbeispiel Wochenkalender

Ein typischer Anwendungsfall für PHP DatePeriod ist die Erzeugung eines Werktagskalenders. Die Klasse übernimmt das Iterieren über die Tage, eine kurze Prüfung mit format('N') filtert dann Samstag und Sonntag aus.

<?php

$start = new DateTimeImmutable('2026-05-15');
$ende = new DateTimeImmutable('2026-06-12');
$interval = new DateInterval('P1D');

$periode = new DatePeriod($start, $interval, $ende);
foreach ($periode as $tag) {
/* N liefert Wochentag 1 (Mo) bis 7 (So) */
if ((int)$tag->format('N') < 6) {
echo 'Werktag: ' . $tag->format('d.m.Y') . "\n";
}
}

Wer Feiertage zusätzlich berücksichtigen will, baut sich ein Set bekannter Daten und prüft mit in_array(). Auch hier zeigt sich die Eleganz: Die eigentliche Iteration bleibt zweizeilig, die Filterlogik ist klar von der Datums-Berechnung getrennt. Wer das mit verschachtelten mktime()-Aufrufen versucht, baut sich schnell unleserlichen Code zusammen.

Praxisbeispiel Schichtplan und Zahlungsfristen

In Schichtplänen gibt PHP DatePeriod den Takt vor: Eine 14-tägige Rotation lässt sich mit P14D als Intervall darstellen, eine Wechselschicht alle 8 Stunden mit PT8H. Das ist besonders praktisch, weil Stunden-Intervalle ohne Umweg über Sekunden auskommen.

<?php

/* Sechs Wochen-Rotation alle 14 Tage */
$rotationsstart = new DateTimeImmutable('2026-05-15');
$periode = new DatePeriod(
$rotationsstart,
new DateInterval('P14D'),
6
);
foreach ($periode as $rotation) {
echo 'Schichtstart: ' . $rotation->format('d.m.Y') . "\n";
}

Für Zahlungsfristen ist die Klasse DateInterval oft schon ausreichend, weil dort meist nur einzelne Stichtage berechnet werden. Sobald aber wiederkehrende Mahnstufen automatisch generiert werden sollen, ist PHP DatePeriod wieder das richtige Werkzeug. Eine Mahnung am 14., 30. und 60. Tag lässt sich als Period mit drei Wiederholungen ausdrücken oder als drei einzelne add()-Aufrufe an einem DateTimeImmutable.

Vergleich mit manueller Schleife

Wer aus Gewohnheit zu einer for-Schleife mit mktime() greift, sollte den direkten Vergleich machen. Die folgende Variante zeigt eine manuelle Iteration über 10 Tage und das äquivalente DatePeriod-Snippet.

<?php

/* manuell, fehleranfaellig */
$startTs = strtotime('2026-05-15');
for ($i = 0; $i < 10; $i++) {
echo date('Y-m-d', strtotime("+$i days", $startTs)) . "\n";
}

/* mit DatePeriod, klar lesbar */
$periode = new DatePeriod(
new DateTimeImmutable('2026-05-15'),
new DateInterval('P1D'),
10
);
foreach ($periode as $tag) {
echo $tag->format('Y-m-d') . "\n";
}

Beide Varianten liefern dasselbe Ergebnis, doch die DatePeriod-Variante ist aus mehreren Gründen vorzuziehen: Sie nutzt typsichere DateTime-Objekte, sie hat keine Stringbruchstellen, und sie ist offen für Erweiterungen wie Filter oder Modifikationen. Code-Reviews gehen schneller, weil die Absicht ohne Kommentar erkennbar ist.

flowchart TD
    A[Startdatum festlegen] --> B[DateInterval P1D oder P1W oder P1M]
    B --> C{End-Datum oder Anzahl?}
    C -->|End-Datum| D[DatePeriod start interval end]
    C -->|Anzahl| E[DatePeriod start interval anzahl]
    D --> F[foreach iteriert ueber DateTimeImmutable]
    E --> F

Stolperfallen und Tipps

Drei Punkte sollten beim Einsatz von PHP DatePeriod immer im Kopf sein: Das End-Datum ist standardmäßig exklusiv, die Anzahl der Wiederholungen erzeugt N+1 Iterationen (Start plus N Schritte) und Monatsintervalle wie P1M können am Monatsende überraschen. Ein DatePeriod, der am 31. Januar startet und mit P1M rechnet, springt im Februar auf den 3. März, weil PHP intern den Monat plus eins rechnet und die überzähligen Tage anhängt.

Wer mit Zeitzonen arbeitet, sollte zudem wissen, dass das Intervall P1D ein Kalendertag ist und kein 24-Stunden-Block. Am Tag der Sommerzeit-Umstellung kann der nächste Eintrag also auch nach 23 oder 25 Stunden kommen. Für Stundenintervalle ist PT24H die genauere Wahl, sofern eine konstante Sekunden-Anzahl gewünscht ist.

Fazit

Mit PHP DatePeriod gewinnt der Code an Klarheit, sobald Datumsbereiche durchlaufen werden müssen. Die drei Konstruktor-Varianten decken alle gängigen Fälle ab, von festen End-Daten über zählerbasierte Wiederholungen bis zu ISO-Strings aus Konfigurationen. Wer EXCLUDE_START_DATE und INCLUDE_END_DATE bewusst einsetzt, vermeidet die häufigsten Off-by-one-Fehler. Im Zusammenspiel mit DateInterval und DateTimeImmutable wird die Klasse PHP DatePeriod zur eleganten Alternative für Wochenkalender, Schichtpläne und Mahnstufen, ohne dass eine eigene Schleifenlogik gepflegt werden muss.

 


 

Kommentare (0)

Noch keine Kommentare. Sei der Erste!

Melde dich an, um einen Kommentar zu schreiben.
Bücherregal mit drei Büchern: 'PHP 4 - Grundlagen und Profiwissen' von Hanser Verlag, 'Webdesign in a Nutshell' von O'Reilly Verlag, und 'Webgestaltung' von Galileo Computing.