(PHP 5 >= 5.2.0, PHP 7, PHP 8)
date_parse — Возвращает ассоциативный массив с подробной информацией о заданной дате/времени
Функция date_parse() разбирает указанную
в параметре datetime
строку по тем же правилам,
что и функции strtotime() и DateTimeImmutable::__construct().
Вместо того чтобы возвращать временную метку Unix (при использовании функции strtotime()) или объект DateTimeImmutable (при использовании функции DateTimeImmutable::__construct()),
она возвращает ассоциативный массив с информацией,
которую функция смогла обнаружить в данной строке параметра datetime
.
Если информация об определённой группе элементов не найдена,
эти элементы массива будут установлены в значение false
или будут отсутствовать.
Если это необходимо для построения временной метки или объекта DateTimeImmutable
из одной и той же строки параметра datetime
,
большее количество полей может быть установлено в значение не false
.
Смотрите примеры, в которых это происходит.
datetime
Дата/время в формате, распознаваемом функцией DateTimeImmutable::__construct().
Возвращает массив (array), содержащий информацию о дате/времени.
Возвращаемый массив содержит ключи year
,
month
, day
, hour
,
minute
, second
,
fraction
и is_localtime
.
Если присутствует is_localtime
, то zone_type
указывает тип часового пояса.
Для типа 1
(смещение UTC) указывается zone
, добавляется поле is_dst
;
для типа 2
(аббревиатура) добавляются поля tz_abbr
и is_dst
;
для типа 3
(идентификатор часового пояса) добавляются поля tz_abbr
и tz_id
.
Если в параметре datetime
присутствуют элементы относительного времени,
например, +3 days
, то возвращаемый массив включает вложенный массив с ключом relative
.
Этот массив затем содержит ключи
year
, month
, day
,
hour
, minute
,
second
, и, если необходимо, weekday
и
weekdays
, в зависимости от переданной строки.
Массив включает поля warning_count
и warnings
.
Первое из них указывает, сколько было предупреждений.
Ключи элементов массива warnings
указывают на позицию в данном параметре datetime
,
где произошло предупреждение, а строковое значение описывает само предупреждение.
Массив также содержит поля error_count
и errors
.
Первое из них указывает, сколько ошибок было найдено.
Ключи элементов массива errors
указывают на позицию в данном параметре datetime
,
где произошла ошибка, а строковое значение описывает саму ошибку.
Количество элементов массивов warnings
и
errors
может быть меньше, чем
warning_count
или error_count
,
если они возникли в одной и той же позиции.
В случае возникновения ошибок форматирования даты/времени, элемент массива 'errors' будет содержать сообщения об этих ошибках.
Версия | Описание |
---|---|
7.2.0 |
Элемент возвращаемого массива с ключом zone
теперь содержит секунды, а не минуты. Кроме того, знак
инвертирован. Т.е. раньше был
-120 , а теперь 7200 .
|
Пример #1 Пример использования функции date_parse() с полной строкой datetime
<?php
var_dump(date_parse("2006-12-12 10:00:00.5"));
?>
Результат выполнения приведённого примера:
array(12) { ["year"]=> int(2006) ["month"]=> int(12) ["day"]=> int(12) ["hour"]=> int(10) ["minute"]=> int(0) ["second"]=> int(0) ["fraction"]=> float(0.5) ["warning_count"]=> int(0) ["warnings"]=> array(0) { } ["error_count"]=> int(0) ["errors"]=> array(0) { } ["is_localtime"]=> bool(false) }
Элементы часовых поясов появляются только в том случае,
если они включены в заданную строку параметра datetime
.
В этом случае всегда будет присутствовать элемент zone_type
и ещё несколько в зависимости от его значения.
Пример #2 Пример использования date_parse() с информацией об аббревиатуре часового пояса
<?php
var_dump(date_parse("June 2nd, 2022, 10:28:17 BST"));
?>
Результат выполнения приведённого примера:
array(16) { ["year"]=> int(2022) ["month"]=> int(6) ["day"]=> int(2) ["hour"]=> int(10) ["minute"]=> int(28) ["second"]=> int(17) ["fraction"]=> float(0) ["warning_count"]=> int(0) ["warnings"]=> array(0) { } ["error_count"]=> int(0) ["errors"]=> array(0) { } ["is_localtime"]=> bool(true) ["zone_type"]=> int(2) ["zone"]=> int(0) ["is_dst"]=> bool(true) ["tz_abbr"]=> string(3) "BST" }
Пример #3 Пример использования date_parse() с информацией об идентификаторе часового пояса
<?php
var_dump(date_parse("June 2nd, 2022, 10:28:17 Europe/London"));
?>
Результат выполнения приведённого примера:
array(14) { ["year"]=> int(2022) ["month"]=> int(6) ["day"]=> int(2) ["hour"]=> int(10) ["minute"]=> int(28) ["second"]=> int(17) ["fraction"]=> float(0) ["warning_count"]=> int(0) ["warnings"]=> array(0) { } ["error_count"]=> int(0) ["errors"]=> array(0) { } ["is_localtime"]=> bool(true) ["zone_type"]=> int(3) ["tz_id"]=> string(13) "Europe/London" }
Если разбирается более минимальная строка параметра datetime
,
то информации будет меньше. В этом примере все части времени возвращаются как false
.
Пример #4 Пример использования date_parse() с минимальной строкой
<?php
var_dump(date_parse("June 2nd, 2022"));
?>
Результат выполнения приведённого примера:
array(12) { ["year"]=> int(2022) ["month"]=> int(6) ["day"]=> int(2) ["hour"]=> bool(false) ["minute"]=> bool(false) ["second"]=> bool(false) ["fraction"]=> bool(false) ["warning_count"]=> int(0) ["warnings"]=> array(0) { } ["error_count"]=> int(0) ["errors"]=> array(0) { } ["is_localtime"]=> bool(false) }
Относительные форматы не влияют на значения, разбираемые из абсолютных форматов, но разбираются в элемент "relative".
Пример #5 Пример использования date_parse() с относительными форматами
<?php
var_dump(date_parse("2006-12-12 10:00:00.5 +1 week +1 hour"));
?>
Результат выполнения приведённого примера:
array(13) { ["year"]=> int(2006) ["month"]=> int(12) ["day"]=> int(12) ["hour"]=> int(10) ["minute"]=> int(0) ["second"]=> int(0) ["fraction"]=> float(0.5) ["warning_count"]=> int(0) ["warnings"]=> array(0) { } ["error_count"]=> int(0) ["errors"]=> array(0) { } ["is_localtime"]=> bool(false) ["relative"]=> array(6) { ["year"]=> int(0) ["month"]=> int(0) ["day"]=> int(7) ["hour"]=> int(1) ["minute"]=> int(0) ["second"]=> int(0) } }
Некоторые строки, такие как Thursday
, установят временную часть строки в значение 0
.
Если Thursday
передать в функцию DateTimeImmutable::__construct(),
то это также приведёт к тому, что час, минута, секунда и дробь будут установлены в значение 0
.
В приведённом ниже примере элемент year, однако, оставлен как false
.
Пример #6 Пример использования date_parse() с побочными эффектами
<?php
var_dump(date_parse("Thursday, June 2nd"));
?>
Результат выполнения приведённого примера:
array(13) { ["year"]=> bool(false) ["month"]=> int(6) ["day"]=> int(2) ["hour"]=> int(0) ["minute"]=> int(0) ["second"]=> int(0) ["fraction"]=> float(0) ["warning_count"]=> int(0) ["warnings"]=> array(0) { } ["error_count"]=> int(0) ["errors"]=> array(0) { } ["is_localtime"]=> bool(false) ["relative"]=> array(7) { ["year"]=> int(0) ["month"]=> int(0) ["day"]=> int(0) ["hour"]=> int(0) ["minute"]=> int(0) ["second"]=> int(0) ["weekday"]=> int(4) } }
datetime
с определённым заданным форматом