PHP 8.4.2 Released!

DateTimeImmutable::getLastErrors

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

DateTimeImmutable::getLastErrorsВозвращает предупреждения и ошибки

Описание

public static DateTimeImmutable::getLastErrors(): array|false

Метод возвращает массив предупреждений и ошибок, которые обнаружил при разборе строки с датой и временем.

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

У этой функции нет параметров.

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

Метод возвращает массив, который содержит информацию о предупреждениях и ошибках, или false, если нет ни предупреждений, ни ошибок.

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

Версия Описание
8.2.0 До версии PHP 8.2.0 метод не возвращал false, когда не было предупреждений или ошибок. Вместо этого метод каждый раз возвращал задокументированную структуру массива.

Примеры

Пример #1 Пример использования метода DateTimeImmutable::getLastErrors()

<?php

try {
$date = new DateTimeImmutable('asdfasdf');
} catch (
Exception $e) {
// Обработка исключения таким способом приводится только в демонстрационных целях…
print_r(DateTimeImmutable::getLastErrors());

// …в объектно-ориентированном стиле лучше выводить сообщение вот так:
// echo $e->getMessage();
}
?>

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

Array
(
   [warning_count] => 1
   [warnings] => Array
       (
           [6] => Double timezone specification
       )

   [error_count] => 1
   [errors] => Array
       (
           [0] => The timezone could not be found in the database
       )

)

Индексы 6 и 0 в выводе примера относятся к индексу символа в строке разбора, на котором возникла ошибка.

Добавить

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

up
0
_mittens
1 year ago
If you are curious as to when the internal array gets resetted (from https://onlinephp.io/c/3ee35):

<?php

$date0
= DateTimeImmutable::createFromFormat('!Y-m-d', '2020-31-31');
var_dump($date0->format('c')); // 2022-07-31T00:00:00+00:00

foreach(range(0,2) as $_)
// The internal error won't reset
var_dump( join(DateTimeImmutable::getLastErrors()['warnings']) ); // The parsed date was invalid

$date1 = DateTimeImmutable::createFromFormat('!Y-m-d', '2020-12-31');
var_dump($date1->format('c')); // 2020-12-31T00:00:00+00:00

// The internal error did reset
var_dump( empty(DateTimeImmutable::getLastErrors()['warnings']) ); // true

$date2 = DateTimeImmutable::createFromFormat('!Y-m-d', '2020-31-31');
var_dump( join(DateTimeImmutable::getLastErrors()['warnings']) ); // The parsed date was invalid
$date3 = new DateTimeImmutable('2023-12-31T00:00:00.000000Z');

// The internal error did reset
var_dump( empty(DateTimeImmutable::getLastErrors()['warnings']) ); // true
?>

Output:
string(25) "2022-07-31T00:00:00+00:00"
string(27) "The parsed date was invalid"
string(27) "The parsed date was invalid"
string(27) "The parsed date was invalid"
string(25) "2020-12-31T00:00:00+00:00"
bool(true)
string(27) "The parsed date was invalid"
bool(true)
To Top