(PHP 5 >= 5.3.0, PHP 7)
DatePeriod::__construct — Создает новый объект DatePeriod
$start
   , DateInterval $interval
   , int $recurrences
   [, int $options
  ] )$start
   , DateInterval $interval
   , DateTimeInterface $end
   [, int $options
  ] )$isostr
   [, int $options
  ] )Создает новый объект DatePeriod.
startНачальная дата.
intervalИнтервал.
recurrencesКоличество повторений.
endКонечная дата.
isostrСтрока, содержащая интервал согласно спецификации ISO 8601.
options
       Может быть установлено значение DatePeriod::EXCLUDE_START_DATE, 
       для исключения начальной даты из периода.
      
| Версия | Описание | 
|---|---|
| 5.5.8 | Тип параметра endизменен на
        DateTimeImmutable.
        Ранее использовался DateTime. | 
| 5.5.0 | Тип параметра startизменен на
        DateTimeImmutable.
        Ранее использовался DateTime. | 
Пример #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
   Несвязное количество повторений, определенные в секции 4.5 ISO 8601
   "Recurring time interval", не поддерживается. То есть 
   ни подстановка "R/..." как isostr ни
   NULL как end работать не будут.