PHP 8.6.0 Beta 1 is available for testing

Класс 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 .

Содержание

Нашли ошибку?

ИнструкцияИсправлениеСообщение об ошибке
+Добавить

Примечания пользователей 1 note

up
36
mail at pascalhofmann dot de
9 years ago
When looping over a DatePeriod object, the returned objects always implement DateTimeInterface. The exact type returned depends on how the DatePeriod was created. If $start was a DateTimeImmutable, the objects returned will be of type DateTimeImmutable. If a DateTime object was used, the objects returned will be of type DateTime.
+Добавить

AltStyle によって変換されたページ (->オリジナル) /