PHP 8.3.4 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 указывают на символьные позиции в строке, где произошла ошибка.

add a note

User Contributed Notes 1 note

up
0
_mittens
4 months 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