# DatePeriod::__construct

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

DatePeriod::__construct — Crée un nouvel objet DatePeriod

### Description

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

Cette variante du constructeur a été rendu obsolète, utilisez DatePeriod::createFromISO8601String() à la place.

Crée un nouvel objet DatePeriod.

Les objetsDatePeriod peuvent être utilisés comme itérateur pour générer un certain nombre d'objets DateTimeImmutable ou DateTime à partir d'une `start` date (date de début), un `interval`, et une `end` date (date de fin) ou du nombre de `récurrences`.

La classe des objets renvoyés est équivalente à la classe ancêtre DateTimeImmutable ou DateTime fournis pas l'objet `start`.

### Liste de paramètres

`start`

  La date de début de la période. Inclus par défaut dans le jeu de résultats.

`interval`

  L'intervalle entre les récurrences de la période.

`recurrences`

  Le nombre de récurrences. Doit être plus grand que `0`. Le nombre de résultats renvoyés est supérieur d'une unité, car la date de début est incluse dans le jeu de résultats par défaut.

`end`

  La date de fin de la période. Non inclus par défaut dans le jeu de résultats.

`isostr`

  Un sous-ensemble de la » spécification ISO 8601 de la répétition de l'intervalle.

  Exemples de certaines fonctionnalités de spécification d'intervalle ISO 8601 que PHP ne prend pas en charge :

  1. Les occurrences zéro (`R0/`)
  2. Décalages horaires autres que UTC (`Z`), tels que `+02:00`.
`options`

  Un champ de bits qui peut être utilisé pour contrôler certains comportements avec les dates de début et de fin.

  Peut être configuré à `DatePeriod::EXCLUDE_START_DATE` pour exclure la date de début du jeu de dates de récursion dans la période.

  Peut être configuré à `DatePeriod::INCLUDE_END_DATE` pour inclure la date de fin du jeu de dates de récursion dans la période.

### Erreurs / Exceptions

Lance une exception DateMalformedPeriodStringException lorsque le paramètre `isostr` ne peut être analysé comme une période ISO 8601 valide. Antérieur à PHP 8.3, ceci était une Exception.

### Historique

Version | Description
--- | ---
8.3.0 | Lance désormais une DateMalformedPeriodStringException au lieu de Exception.
8.2.0 | La constante `DatePeriod::INCLUDE_END_DATE` a été ajoutée.
7.2.19, 7.3.6, 7.4.0 | `recurrences` doit désormais être plus grand que `0`.

### Exemples

Exemple #1 Exemple avec DatePeriod

`<?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';
// Toutes ces périodes sont équivalentes.
$period = new DatePeriod($start, $interval, $recurrences);
$period = new DatePeriod($start, $interval, $end);
$period = new DatePeriod($iso);
// En parcourant l'objet DatePeriod, toutes les
// dates de la récursion pour la période seront affichées.
foreach ($period as $date) {
echo $date->format('Y-m-d')."\n";
}
?>`

L'exemple ci-dessus va afficher :

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

Exemple #2 Exemple avec DatePeriod et `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);
// En parcourant l'objet DatePeriod,
// toutes les dates de récursion pour la période sont affichées.
// Notez que, dans ce cas, 2012-07-01 ne sera pas affiché.
foreach ($period as $date) {
echo $date->format('Y-m-d')."\n";
}
?>`

L'exemple ci-dessus va afficher :

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

Exemple #3 DatePeriod montrant tous les derniers jeudis du mois sur une année

`<?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";
}
?>`

L'exemple ci-dessus va afficher :

    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

### Notes

Les nombres de répétitions non liés spécifiés dans la section 4.5 "Intervalle de temps récurrent" de la norme ISO 8601 ne sont pas supportés, c'est-à-dire ni `"R/..."` comme `isostr` ni `null` comme `end` ne fonctionnerait.