PHP 8.0.26 Released!

Класс DatePeriod

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

Введение

Представляет временной период.

Позволяет перемещаться в заданном временном интервале на равные промежутки времени.

Обзор классов

class DatePeriod implements IteratorAggregate {
/* Константы */
public const int EXCLUDE_START_DATE;
public const int INCLUDE_END_DATE;
/* Свойства */
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;
/* Методы */
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 getRecurrences(): ?int
}

Предопределённые константы

DatePeriod::EXCLUDE_START_DATE

Исключает начальную дату, используется в DatePeriod::__construct().

DatePeriod::INCLUDE_END_DATE

Включает дату окончания, используется в DatePeriod::__construct().

Свойства

recurrences

Минимальное количество экземпляров, возвращаемое итератором.

Если количество повторений было явно передано с помощью параметра $recurrences в конструктор экземпляра DatePeriod, то это свойство содержит это значение, плюс один, если дата начала не была отключена с помощью константы DatePeriod::EXCLUDE_START_DATE, плюс один, если дата окончания была включена с помощью константы DatePeriod::INCLUDE_END_DATE.

Если количество повторений не было передано явно, то это свойство содержит минимальное количество возвращённых экземпляров. Это будет 0, плюс один, если дата начала не отключена с помощью константы DatePeriod::EXCLUDE_START_DATE, плюс один, если дата окончания была включена с помощью константы 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;

// повторения явно задаются в конструкторе
$period = new DatePeriod($start$interval$recurrencesDatePeriod::EXCLUDE_START_DATE);
echo 
$period->recurrences"\n";

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

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

// повторения не заданы в конструкторе
$period = new DatePeriod($start$interval$end);
echo 
$period->recurrences"\n";

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

Результат выполнения данного примера:


5
6
7
1
0

Смотрите также описание метода DatePeriod::getRecurrences().

include_end_date

Включать ли дату окончания в набор повторяющихся дат или нет.

include_start_date

Включать ли начальную дату в набор дат или нет.

start

Дата начала периода.

current

В процессе итерации будет содержать текущую дату периода.

end

Конечная дата периода.

interval

Спецификация повторяющегося интервала согласно ISO 8601.

Список изменений

Версия Описание
8.2.0 Были добавлены константа DatePeriod::INCLUDE_END_DATE и свойство include_end_date.
8.0.0 Класс DatePeriod теперь реализует интерфейс IteratorAggregate. Ранее вместо этого был реализован интерфейс Traversable.

Содержание

add a note

User Contributed Notes 1 note

up
18
mail at pascalhofmann dot de
5 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