(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
с определённым заданным форматом