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