array ( 0 => 'index.php', 1 => 'PHP Manual', ), 'head' => array ( 0 => 'UTF-8', 1 => 'ru', ), 'this' => array ( 0 => 'dateinterval.construct.php', 1 => 'DateInterval::__construct', ), 'up' => array ( 0 => 'class.dateinterval.php', 1 => 'DateInterval', ), 'prev' => array ( 0 => 'class.dateinterval.php', 1 => 'DateInterval', ), 'next' => array ( 0 => 'dateinterval.createfromdatestring.php', 1 => 'DateInterval::createFromDateString', ), 'alternatives' => array ( ), 'source' => array ( 'lang' => 'ru', 'path' => 'reference/datetime/dateinterval/construct.xml', ), ); $setup["toc"] = $TOC; $setup["toc_deprecated"] = $TOC_DEPRECATED; $setup["parents"] = $PARENTS; manual_setup($setup); ?>
(PHP 5 >= 5.3.0, PHP 7, PHP 8)
DateInterval::__construct — Создаёт новый объект DateInterval
duration
Описание интервала.
Формат описания интервала начинается с буквы P
(от англ. period).
Длительность периодов представляют целочисленным значением, за которым идёт
обозначение периода. Перед частью описания с элементами времени указывают букву T
.
Обозначение периода | Описание |
---|---|
Y |
Годы |
M |
Месяцы |
D |
Дни |
W |
Недели. Преобразовываются в дни.
До PHP 8.0.0 нельзя было объединять с обозначением дней D .
|
H |
Часы |
M |
Минуты |
S |
Секунды |
Вот несколько простых примеров.
Два дня — P2D
.
Две секунды — PT2S
.
Шесть лет и пять минут — P6YT5M
.
Замечание:
Единицы измерения записывают от наибольшей величины слева к наименьшей величине справа. То есть годы идут перед месяцами, месяцы перед днями, дни перед минутами и т. д. Поэтому один год и четыре дня представляют как
P1Y4D
, но неP4D1Y
.
Описание можно записать и в виде даты и времени.
Пример одного года и четырёх дней можно описать как
P0001-00-04T00:00:00
.
Но значения в этом формате не должны выходить за рамки
допустимых значений даты и времени (например, 25
часов недопустимо).
Эти форматы основаны на » стандарте ISO 8601.
Метод выбросит исключение DateMalformedIntervalStringException,
если не разберёт значение параметра duration
как интервал.
До PHP 8.3 метод выбрасывал исключение Exception.
Версия | Описание |
---|---|
8.3.0 | Теперь вместо исключения Exception выбрасывается исключение DateMalformedIntervalStringException. |
8.2.0 |
Из свойств объекта интервала будут видны только y в f ,
invert и days ,
включая новое логическое свойство from_string .
|
8.0.0 |
Обозначение недель W теперь разрешено
комбинировать с обозначением дней D .
|
Пример #1 Пример создания и использования объектов DateInterval
<?php
// Создаём конкретную дату
$someDate = \DateTime::createFromFormat("Y-m-d H:i", "2022-08-25 14:18");
// Создаём интервал
$interval = new \DateInterval("P7D");
// Добавляем интервал
$someDate->add($interval);
// Преобразовываем интервал в строку
echo $interval->format("%d");
?>
Результат выполнения приведённого примера:
Пример #2 Пример использования объекта DateInterval
<?php
$interval = new DateInterval('P1W2D');
var_dump($interval);
?>
Результат выполнения приведённого примера в PHP 8.2:
object(DateInterval)#1 (10) { ["y"]=> int(0) ["m"]=> int(0) ["d"]=> int(9) ["h"]=> int(0) ["i"]=> int(0) ["s"]=> int(0) ["f"]=> float(0) ["invert"]=> int(0) ["days"]=> bool(false) ["from_string"]=> bool(false) }
Результат выполнения приведённого примера в PHP 8:
object(DateInterval)#1 (16) { ["y"]=> int(0) ["m"]=> int(0) ["d"]=> int(9) ["h"]=> int(0) ["i"]=> int(0) ["s"]=> int(0) ["f"]=> float(0) ["weekday"]=> int(0) ["weekday_behavior"]=> int(0) ["first_last_day_of"]=> int(0) ["invert"]=> int(0) ["days"]=> bool(false) ["special_type"]=> int(0) ["special_amount"]=> int(0) ["have_weekday_relative"]=> int(0) ["have_special_relative"]=> int(0) }
Результат выполнения приведённого примера в PHP 7:
object(DateInterval)#1 (16) { ["y"]=> int(0) ["m"]=> int(0) ["d"]=> int(2) ["h"]=> int(0) ["i"]=> int(0) ["s"]=> int(0) ["f"]=> float(0) ["weekday"]=> int(0) ["weekday_behavior"]=> int(0) ["first_last_day_of"]=> int(0) ["invert"]=> int(0) ["days"]=> bool(false) ["special_type"]=> int(0) ["special_amount"]=> int(0) ["have_weekday_relative"]=> int(0) ["have_special_relative"]=> int(0) }