CascadiaPHP 2024

DatePeriod::__construct

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

DatePeriod::__constructCré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.

add a note

User Contributed Notes

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