PHP 8.4.0 RC4 available for testing

La classe DatePeriod

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

Introduction

Représente une période de dates.

Une période de dates permet des itérations à travers un jeu de dates et d'heures, survenant à intervalle régulier, sur une période donnée.

Synopsis de la classe

class DatePeriod implements IteratorAggregate {
/* Constantes */
public const int EXCLUDE_START_DATE;
public const int INCLUDE_END_DATE;
/* Propriétés */
public readonly ?DateTimeInterface $start;
public readonly ?DateTimeInterface $current;
public readonly ?DateTimeInterface $end;
public readonly ?DateInterval $interval;
public readonly int $recurrences;
public readonly bool $include_start_date;
public readonly bool $include_end_date;
/* Méthodes */
public __construct(
    DateTimeInterface $start,
    DateInterval $interval,
    int $recurrences,
    int $options = 0
)
public __construct(
    DateTimeInterface $start,
    DateInterval $interval,
    DateTimeInterface $end,
    int $options = 0
)
public __construct(string $isostr, int $options = 0)
public static createFromISO8601String(string $specification, int $options = 0): static
}

Constantes pré-définies

DatePeriod::EXCLUDE_START_DATE

Exclut la date de début, utilisée par DatePeriod::__construct().

DatePeriod::INCLUDE_END_DATE

Inclut la date de fin, utilisée par DatePeriod::__construct().

Propriétés

recurrences

La quantité minimale d'instances retournée par l'itérateur.

Si le nombre de récurrences a été explicitement passé par l'intermédiaire du paramètre $recurrences dans le constructeur de l'instance DatePeriod, alors cette propriété contient cette valeur, plus un si la date de début n'a pas été désactivée par DatePeriod::EXCLUDE_START_DATE, plus un si la date de fin a été activée par DatePeriod::INCLUDE_END_DATE.

Si le nombre de récurrences n'a pas été explicitement passé, alors cette propriété contient le nombre minimum d'instances retournées. Cela serait 0, plus un si la date de début n'a pas été désactivée par DatePeriod::EXCLUDE_START_DATE, plus un si la date de fin a été activée par DatePeriod::INCLUDE_END_DATE.

<?php
$start
= new DateTime('2018-12-31 00:00:00');
$end = new DateTime('2021-12-31 00:00:00');
$interval = new DateInterval('P1M');
$recurrences = 5;

// récurrences explicitement définies par le constructeur
$period = new DatePeriod($start, $interval, $recurrences, DatePeriod::EXCLUDE_START_DATE);
echo
$period->recurrences, "\n";

$period = new DatePeriod($start, $interval, $recurrences);
echo
$period->recurrences, "\n";

$period = new DatePeriod($start, $interval, $recurrences, DatePeriod::INCLUDE_END_DATE);
echo
$period->recurrences, "\n";

// récurrences non définies dans le constructeur
$period = new DatePeriod($start, $interval, $end);
echo
$period->recurrences, "\n";

$period = new DatePeriod($start, $interval, $end, DatePeriod::EXCLUDE_START_DATE);
echo
$period->recurrences, "\n";
?>

L'exemple ci-dessus va afficher :


5
6
7
1
0

Voir aussi DatePeriod::getRecurrences().

include_end_date

Inclut ou non la date de fin dans le jeu de dates récurrentes.

include_start_date

S'il faut inclure la date de début dans l'ensemble des dates récurrentes ou non.

start

La date de début de la période.

current

Pendant l'itération, cela contiendra la date du jour dans la période.

end

La date de fin de la période.

interval

Une spécification d'intervalle répétitif ISO 8601.

Historique

Version Description
8.2.0 La constante DatePeriod::INCLUDE_END_DATE et la propriété include_end_date ont été ajoutées.
8.0.0 La classe DatePeriod implémente désormais IteratorAggregate. Auparavant, seule Traversable était implémentée.

Sommaire

add a note

User Contributed Notes 1 note

up
22
mail at pascalhofmann dot de
7 years ago
When looping over a DatePeriod object, the returned objects always implement DateTimeInterface. The exact type returned depends on how the DatePeriod was created. If $start was a DateTimeImmutable, the objects returned will be of type DateTimeImmutable. If a DateTime object was used, the objects returned will be of type DateTime.
To Top