Класс 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 static createFromISO8601String(string $specification, int $options = 0): static
}

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

DatePeriod::EXCLUDE_START_DATE int

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

DatePeriod::INCLUDE_END_DATE int

Включает дату окончания, используется в 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, $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";

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

$period = new DatePeriod($start, $interval, $end, DatePeriod::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.4.0 Константы класса теперь типизированы.
8.2.0 Были добавлены константа DatePeriod::INCLUDE_END_DATE и свойство include_end_date.
8.0.0 Класс DatePeriod теперь реализует интерфейс IteratorAggregate. Ранее вместо этого был реализован интерфейс Traversable.

Содержание

Добавить

Примечания пользователей 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