PHP Conference Nagoya 2025

DatePeriod::__construct

(PHP 5 >= 5.3.0, PHP 7, PHP 8)

DatePeriod::__constructErstellt ein neues DatePeriod-Objekt

Beschreibung

public DatePeriod::__construct(
    DateTimeInterface $start,
    DateInterval $interval,
    int $recurrences,
    int $options = 0
)
public DatePeriod::__construct(
    DateTimeInterface $start,
    DateInterval $interval,
    DateTimeInterface $end,
    int $options = 0
)
Warnung
public DatePeriod::__construct(string $isostr, int $options = 0)

Diese Variante des Konstruktors ist veraltet; stattdessen sollte DatePeriod::createFromISO8601String() verwendet werden.

Erstellt ein neues DatePeriod-Objekt.

DatePeriod-Objekte können als Iterator verwendet werden, um aus einem start-Datum, einem interval und einem end-Datum oder der Anzahl der recurrences (Wiederholungen) eine Reihe von DateTimeImmutable- oder DateTime-Objekten zu erzeugen.

Die Klasse der zurückgegebenen Objekte entspricht der DateTimeImmutable- oder DateTime-Elternklasse des start-Objekts.

Parameter-Liste

start

Das Startdatum des Zeitraums; wird standardmäßig in die Ergebnismenge aufgenommen.

interval

Das Intervall zwischen den Wiederholungen innerhalb des Zeitraums.

recurrences

Die Anzahl der Wiederholungen. Die Anzahl der zurückgegebenen Ergebnisse ist um eins größer, da das Startdatum standardmäßig in die Ergebnismenge aufgenommen wird; muss größer als 0 sein.

end

Das Enddatum des Zeitraums; wird standardmäßig nicht in die Ergebnismenge aufgenommen.

isostr

Eine Teilmenge der » ISO-8601-Spezifikation für sich wiederholende Intervalle.

Beispiele für Features der ISO-8601-Spezifikation für Intervalle, die von PHP nicht unterstützt werden, sind:

  1. null Vorkommen (R0/)
  2. andere Zeitabweichungen als UTC (Z), wie +02:00.
options

Ein Bitfeld, mit dem ein bestimmtes Verhalten bezüglich der Start- und Enddaten gesteuert werden kann.

Mit DatePeriod::EXCLUDE_START_DATE wird das Startdatum aus der Menge der wiederkehrenden Termine innerhalb des Zeitraums ausgeschlossen.

Mit DatePeriod::INCLUDE_END_DATE wird das Enddatum in die Menge der wiederkehrenden Termine innerhalb des Zeitraums aufgenommen.

Fehler/Exceptions

Wenn isostr nicht als gültiger ISO-8601-Zeitraum geparst werden kann, wird eine DateMalformedPeriodStringException geworfen. Vor PHP 8.3 wird eine Exception geworfen.

Changelog

Version Beschreibung
8.3.0 Wirft nun eine DateMalformedPeriodStringException anstelle von Exception.
8.2.0 Die Konstante DatePeriod::INCLUDE_END_DATE wurde hinzugefügt.
7.2.19, 7.3.6, 7.4.0 recurrences muss jetzt größer als 0 sein.

Beispiele

Beispiel #1 DatePeriod-Beispiel

<?php
$start
= new DateTime('2012-07-01');
$interval = new DateInterval('P7D');
$end = new DateTime('2012-07-31');
$recurrences = 4;
$iso = 'R4/2012-07-01T00:00:00Z/P7D';

// Alle diese Zeiträume sind gleichwertig.
$period = new DatePeriod($start, $interval, $recurrences);
$period = new DatePeriod($start, $interval, $end);
$period = new DatePeriod($iso);

// Durch Iterieren über das DatePeriod-Objekt, werden alle sich
// wiederholenden Termine innerhalb des Zeitraums ausgegeben.
foreach ($period as $date) {
echo
$date->format('Y-m-d')."\n";
}
?>

Das oben gezeigte Beispiel erzeugt folgende Ausgabe:

2012-07-01
2012-07-08
2012-07-15
2012-07-22
2012-07-29

Beispiel #2 DatePeriod-Beispiel mit DatePeriod::EXCLUDE_START_DATE

<?php
$start
= new DateTime('2012-07-01');
$interval = new DateInterval('P7D');
$end = new DateTime('2012-07-31');

$period = new DatePeriod($start, $interval, $end,
DatePeriod::EXCLUDE_START_DATE);

// Durch Iterieren über das DatePeriod-Objekt werden alle sich
// wiederholenden Termine innerhalb des Zeitraums ausgegeben.
// Es ist zu beachten, dass in diesem Fall 2012-07-01 nicht ausgegeben wird.
foreach ($period as $date) {
echo
$date->format('Y-m-d')."\n";
}
?>

Das oben gezeigte Beispiel erzeugt folgende Ausgabe:

2012-07-08
2012-07-15
2012-07-22
2012-07-29

Beispiel #3 Ein DatePeriod-Beispiel, das alle letzten Donnerstage eines Jahres anzeigt

<?php
$begin
= new DateTime('2021-12-31');
$end = new DateTime('2022-12-31 23:59:59');

$interval = DateInterval::createFromDateString('last thursday of next month');
$period = new DatePeriod($begin, $interval, $end, DatePeriod::EXCLUDE_START_DATE);

foreach (
$period as $dt) {
echo
$dt->format('l Y-m-d'), "\n";
}
?>

Das oben gezeigte Beispiel erzeugt folgende Ausgabe:

Thursday 2022-01-27
Thursday 2022-02-24
Thursday 2022-03-31
Thursday 2022-04-28
Thursday 2022-05-26
Thursday 2022-06-30
Thursday 2022-07-28
Thursday 2022-08-25
Thursday 2022-09-29
Thursday 2022-10-27
Thursday 2022-11-24
Thursday 2022-12-29

Anmerkungen

Die unbegrenzte Anzahl von Wiederholungen, wie von ISO 8601, Abschnitt 4.5 "Recurring time interval" spezifiziert, wird nicht unterstützt, d. h. weder die Übergabe von "R/..." an isostr noch die Übergabe von null an end funktioniert.

add a note

User Contributed Notes

There are no user contributed notes for this page.
To Top