Возвращает ассоциативный массив с подробной информацией о заданной дате/времени

# date_parse

(PHP 5 >= 5.2.0, PHP 7, PHP 8)

date_parse — Возвращает ассоциативный массив с подробной информацией о заданной дате/времени

### Описание

function date_parse(string `$datetime`): array

Функция 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)
      }
    }

### Смотрите также

- date_parse_from_format() - Разбирает строку с датой по заданному формату для разбора параметра `datetime` с определённым заданным форматом
- checkdate() - Проверяет корректность даты по григорианскому календарю для проверки григорианской даты
- getdate() - Возвращает информацию о дате и времени

`↑` and `↓` to navigate • `Enter` to select • `Esc` to close • `/` to open