DateTime::getLastErrors

date_get_last_errors

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

DateTime::getLastErrors -- date_get_last_errors获取警告和错误信息

说明

面向对象风格

public static DateTime::getLastErrors ( ) : array

过程化风格

返回在解析日期时间字符串的过程中发生的警告和错误信息。

参数

此函数没有参数。

返回值

返回一个数组,其中包含在解析日期时间字符串的过程中发生的警告和错误信息。

范例

Example #1 DateTime::getLastErrors() 例程

面向对象风格

<?php
try {
    
$date = new DateTime('asdfasdf');
} catch (
Exception $e) {
    
// 仅出于演示的目的...
    
print_r(DateTime::getLastErrors());

    
// 实际的代码中你应该这样使用返回对象
    // echo $e->getMessage();
}
?>

过程化风格

<?php
$date 
date_create('asdfasdf');
print_r(date_get_last_errors());
?>

以上例程会输出:

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 表示在解析过程中,所提供的日期时间字符串中无法正确解析的字符位置。

User Contributed Notes

framework at photon-project dot com 28-Feb-2011 12:08
DateTime::createFromFormat is smart to handle the cases where you input an invalid date, like April 31st, and convert it to May 1st. In some cases, you do not want this automatic smart handling of the dates for example in a user input form where you want to be sure that your user did input the date he wanted. To do that, you need to get access to the warnings, this method is the only way to do it:

<?php
$date
= DateTime::createFromFormat('Y-m-d', '1999-04-31');
print
$date->format('Y-m-d') . PHP_EOL;
print_r(DateTime::getLastErrors());
?>

The output is:

1999-05-01
Array
(
    [warning_count] => 1
    [warnings] => Array
        (
            [10] => The parsed date was invalid
        )

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

)

So, here you can see, you have a warning because the date was invalid, but not an error because PHP was smart enough to convert it into a valid date. It is then up to you to do something with this information.