(PHP 5 >= 5.3.0, PHP 7, PHP 8)
DatePeriod::__construct — Erstellt ein neues DatePeriod-Objekt
$start
,$interval
,$recurrences
,$options
= 0$start
,$interval
,$end
,$options
= 0Diese 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.
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:
R0/
)
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.
Wenn isostr
nicht als gültiger ISO-8601-Zeitraum
geparst werden kann, wird eine
DateMalformedPeriodStringException geworfen. Vor
PHP 8.3 wird eine Exception geworfen.
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.
|
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
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.