CakeFest 2024: The Official CakePHP Conference

DatePeriod::__construct

(PHP 5 >= 5.3.0, PHP 7, PHP 8)

DatePeriod::__constructСоздаёт новый объект DatePeriod

Описание

public DatePeriod::__construct(
    DateTimeInterface $start,
    DateInterval $interval,
    int $recurrences,
    int $options = 0
)
public DatePeriod::__construct(
    DateTimeInterface $start,
    DateInterval $interval,
    DateTimeInterface $end,
    int $options = 0
)
Внимание
public DatePeriod::__construct(string $isostr, int $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 не поддерживает, являются:

  1. нулевые вхождения (R0/)
  2. смещение времени, отличное от UTC (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, не будут работать.

add a note

User Contributed Notes

There are no user contributed notes for this page.
To Top