International PHP Conference 2019 - Spring Edition

DateTime::getLastErrors

date_get_last_errors

(PHP 5 >= 5.3.0, PHP 7)

DateTime::getLastErrors -- date_get_last_errors警告およびエラーを返す

説明

オブジェクト指向型

public static array DateTime::getLastErrors ( void )

手続き型

array date_get_last_errors ( void )

日付/時刻文字列のパース時に見つかった警告やエラーの配列を返します。

パラメータ

この関数にはパラメータはありません。

返り値

警告やエラーに関する情報を含む配列を返します。

例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(DateTime::getLastErrors());
?>

上の例の出力は以下となります。

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 add a note

User Contributed Notes 1 note

up
17
framework at photon-project dot com
7 years ago
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.
To Top