Erstellt ein neues DatePeriod-Objekt

# DatePeriod::__construct

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

DatePeriod::__construct — Erstellt ein neues DatePeriod-Objekt

### Beschreibung

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

Die folgende Konstruktorvariante ist veraltet:

public function DatePeriod::__construct(string `$isostr`, int `$options` = 0)

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:

    Deprecated: Calling DatePeriod::__construct(string $isostr, int $options = 0) is deprecated, use DatePeriod::createFromISO8601String() instead in script on line 11
    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.

`↑` and `↓` to navigate • `Enter` to select • `Esc` to close • `/` to open