(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
, не будут работать.