PHP 8.4.2 Released!

date_parse_from_format

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

date_parse_from_format Получение информации о заданной в определённом формате дате

Описание

date_parse_from_format(string $format, string $datetime): array

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

Список параметров

format

Документацию по параметру format, смотрите в документации к методу DateTimeImmutable::createFromFormat(). Применяются те же правила.

datetime

Строка, представляющая дату/время.

Возвращаемые значения

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

Возвращаемый массив содержит ключи 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, если они возникли в одной и той же позиции.

Ошибки

Функция выбрасывает ValueError, если параметр datetime содержит нулевые байты.

Список изменений

Версия Описание
8.0.21, 8.1.8, 8.2.0 Теперь при передаче нулевых байтов в параметр datetime выбрасывается ValueError, который ранее молча игнорировался.
7.2.0 Элемент zone возвращаемого массива отображает теперь секунды вместо минут, а его знак инвертируется. Например, -120 теперь будет 7200.

Примеры

Пример #1 Пример использования date_parse_from_format()

<?php

$date
= "6.1.2009 13:00+01:00";
print_r(date_parse_from_format("j.n.Y H:iP", $date));

?>

Результат выполнения приведённого примера:

Array
(
    [year] => 2009
    [month] => 1
    [day] => 6
    [hour] => 13
    [minute] => 0
    [second] => 0
    [fraction] =>
    [warning_count] => 0
    [warnings] => Array
        (
        )

    [error_count] => 0
    [errors] => Array
        (
        )

    [is_localtime] => 1
    [zone_type] => 1
    [zone] => -60
    [is_dst] =>
)

Пример #2 Пример использования date_parse_from_format() с предупреждениями

<?php

$date
= "26 August 2022 22:30 pm";
$parsed = date_parse_from_format("j F Y G:i a", $date);

echo
"Количество предупреждений: ", $parsed['warning_count'], "\n";
foreach (
$parsed['warnings'] as $position => $message) {
echo
"\tПозиция {$position}: {$message}\n";
}

?>

Результат выполнения приведённого примера:

Количество предупреждений: 1
    Позиция 23: The parsed time was invalid

Пример #3 Пример использования date_parse_from_format() с ошибками

<?php

$date
= "26 August 2022 CEST";
$parsed = date_parse_from_format("j F Y H:i", $date);

echo
"Количество ошибок: ", $parsed['error_count'], "\n";
foreach (
$parsed['errors'] as $position => $message) {
echo
"\tПозиция {$position}: {$message}\n";
}

?>

Результат выполнения приведённого примера:

Количество ошибок: 3
    Позиция 15: A two digit hour could not be found
    Позиция 19: Data missing

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

  • DateTimeImmutable::createFromFormat() - Разбирает строку времени по заданному формату
  • checkdate() - Проверяет корректность даты по григорианскому календарю

Добавить

Примечания пользователей 1 note

up
0
jp dot amarok at email dot cz
2 months ago
It seems that the safest way to check for errors is not by checking the number of errors, but warnings instead. See the following example where "m" and "d" are swapped and thus not correct.

<?php
var_dump
( date_parse_from_format('m.d.Y', '18.10.2024') );

OUTPUT:
array(
12) {
[
"year"]=>
int(2024)
[
"month"]=>
int(18)
[
"day"]=>
int(10)
[
"hour"]=>
bool(false)
[
"minute"]=>
bool(false)
[
"second"]=>
bool(false)
[
"fraction"]=>
bool(false)
[
"warning_count"]=>
int(1)
[
"warnings"]=>
array(
1) {
[
10]=>
string(27) "The parsed date was invalid"
}
[
"error_count"]=>
int(0)
[
"errors"]=>
array(
0) {
}
[
"is_localtime"]=>
bool(false)
}
?>

The function simply assigns 18 to the "month" field without errors!! So simply use an if-condition and check "warning_count" to detect possible errors.
To Top