(PHP 5 >= 5.2.0, PHP 7, PHP 8)
date_parse — Возвращает ассоциативный массив с подробной информацией о заданной дате/времени
Функция date_parse() разбирает строку
параметра datetime аналогично
функции strtotime() или методу DateTimeImmutable::__construct() ,
но вместо возврата метки Unix-времени, как это делает функция strtotime() , или объекта
DateTimeImmutable , который создаёт метод DateTimeImmutable::__construct() ),
функция возвращает ассоциативный массив с информацией,
которую функция обнаружила в строке параметра datetime.
Функция установит элементам массива значение false или пропустит элемент,
если не найдёт информацию о конкретных компонентах даты и времени.
Поэтому в PHP предусмотрели другие функции для работы с датой и временем,
которые при том же значении параметра datetime
умеют создавать метку времени или объект DateTimeImmutable ,
в котором заполняют значения для большего количества компонентов времени,
тогда как эта функция для аналогичных компонентов устанавливает значение false .
Примеры на этой странице показывают обработку строк, из которых невозможно извлечь отдельные компоненты времени.
datetimeСтрока с датой и временем в формате, который распознаёт метод DateTimeImmutable::__construct() .
Функция возвращает массив (array ) с информацией о дате и времени.
Результирующий массив содержит следующие ключи: year,
month, day, hour,
minute, second,
fraction и is_localtime.
Элемент zone_type укажет тип часового пояса, если массив с результатами содержит элемент is_localtime.
Для 1-го типа представления часовых поясов — со смещением относительно UTC — добавляются поля zone и is_dst;
для 2-го типа представления — аббревиатура — добавляются поля tz_abbr и is_dst;
для 3-го тип — идентификатор часового пояса — добавляются поля tz_abbr и tz_id.
Функция включит в массив с результатами массив relative,
если строка datetime содержит элементы относительного времени
наподобие +3 days.
Массив с результатами разбора элементов времени в относительном формате содержит следующие ключи:
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 Пример разбора полной строки даты и времени datetimeа функцией date_parse()
<?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 функция установит для компонентов
hour, minute, second и fraction значение 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 с определённым заданным форматом