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