(PHP 5 >= 5.3.0, PHP 7, PHP 8)
DatePeriod::__construct — Создаёт новый объект DatePeriod
$start,$interval,$recurrences,$options = 0$start,$interval,$end,$options = 0Этот вариант конструктора устарел, используйте вместо него метод DatePeriod::createFromISO8601String().
Создаёт новый объект DatePeriod.
   Объекты DatePeriod можно использовать в качестве итератора
   для генерации ряда объектов DateTimeImmutable или DateTime
   из даты start, interval и end
   или числа recurrences.
  
   Класс возвращаемых объектов эквивалентен классу-родителю DateTimeImmutable
   или DateTime объекта start.
  
startНачальная дата. По умолчанию включается в набор результатов.
intervalИнтервал.
recurrences
       Количество повторений. Число возвращаемых результатов на единицу больше этого,
       так как дата начала включается в набор результатов по умолчанию.
       Должно быть больше, чем 0.
      
endКонечная дата. По умолчанию исключается из набора результатов.
isostrПодмножество, содержащее интервал согласно » спецификации ISO 8601.
Примерами некоторых особенностей спецификации интервалов ISO 8601, которые PHP не поддерживает, являются:
R0/)
        
       Z), например, +02:00.
        
       optionsБитовое поле, которое можно использовать для управления определённым поведением с начальной и конечной датами.
       Исключить начальную дату внутри периода из набора повторяющихся дат можно
       с помощью константы DatePeriod::EXCLUDE_START_DATE.
      
       Включить конечную дату внутри периода в набор повторяющихся дат можно
       с помощью константы DatePeriod::INCLUDE_END_DATE.
      
   Когда значение параметра isostr
   не может быть разобрано анализатором как допустимый стандартом ISO 8601 формат,
   выбрасывается исключение DateMalformedPeriodStringException.
   До PHP 8.3 выбрасывалось исключение Exception.
  
| Версия | Описание | 
|---|---|
| 8.3.0 | Теперь вместо исключения Exception выбрасывается исключение DateMalformedPeriodStringException. | 
| 8.2.0 | Добавлена константа DatePeriod::INCLUDE_END_DATE. | 
| 7.2.19, 7.3.6, 7.4.0 | recurrencesдолжен быть больше0. | 
Пример #1 Пример использования 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';
// Эти периоды эквивалентны.
$period = new DatePeriod($start, $interval, $recurrences);
$period = new DatePeriod($start, $interval, $end);
$period = new DatePeriod($iso);
// При переборе экземпляра DatePeriod в цикле будут отображены все отобранные даты
// периода.
foreach ($period as $date) {
    echo $date->format('Y-m-d')."\n";
}
?>Результат выполнения приведённого примера:
2012-07-01 2012-07-08 2012-07-15 2012-07-22 2012-07-29
Пример #2 Пример использования DatePeriod с 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);
// При переборе экземпляра DatePeriod в цикле будут отображены все отобранные даты
// периода.
// Однако в этом случае 2012-07-01 не будет отображена.
foreach ($period as $date) {
    echo $date->format('Y-m-d')."\n";
}
?>Результат выполнения приведённого примера:
2012-07-08 2012-07-15 2012-07-22 2012-07-29
Пример #3 Пример использования DatePeriod, показывающий все последние четверги в году
<?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";
}
?>Результат выполнения приведённого примера:
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
   Несвязное количество повторений, определённые в секции 4.5 ISO 8601
   "Recurring time interval", не поддерживается, то есть
   ни передача "R/..." в isostr, ни
   null в end, не будут работать.
  
