DatePeriod::__construct
(PHP 5 >= 5.3.0, PHP 7, PHP 8)
DatePeriod::__construct — Erstellt ein neues DatePeriod-Objekt
Beschreibung
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:
-
null Vorkommen (
R0/
)
-
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.
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.