# Класс 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 function __construct(
DateTimeInterface `$start`,
DateInterval `$interval`,
int `$recurrences`,
int `$options` = 0
)
public function __construct(
DateTimeInterface `$start`,
DateInterval `$interval`,
DateTimeInterface `$end`,
int `$options` = 0
)
public function __construct(string `$isostr`, int `$options` = 0)
public static function createFromISO8601String(string `$specification`, int `$options` = 0): static
public function getDateInterval(): DateInterval
public function getEndDate(): ?DateTimeInterface
public function getRecurrences(): ?int
public function getStartDate(): DateTimeInterface
}

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

`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.

## Содержание

- DatePeriod::__construct — Инициализирует новый экземпляр класса DatePeriod
- DatePeriod::createFromISO8601String — Создаёт новый объект DatePeriod из строки в формате стандарта ISO8601
- DatePeriod::getDateInterval — Возвращает временной интервал
- DatePeriod::getEndDate — Возвращает конечную дату периода
- DatePeriod::getRecurrences — Получает количество повторений
- DatePeriod::getStartDate — Возвращает начальную дату периода

`↑` and `↓` to navigate • `Enter` to select • `Esc` to close • `/` to open