2

DateTime::createFromFormat()以前は文字列を日付に解析していましたが、今日問題が見つかり、この呼び出しから null が返されました。

echo $date_string;
$test = DateTime::createFromFormat('M d Y, H:i:s T', trim($date_string));
echo $test->format('Y-m-d H:i:s');

出力:

Oct 16 2013, 15:45:02 CEST

( ! ) Fatal error: Call to a member function format() on a non-object in (...) on line 51

51行目は、私が呼び出す最後の行format()です。

それで、私は何か不足していますか?前もって感謝します!


DateTime::getLastErrors()要求された出力:

(
    [warning_count] => 0
    [warnings] => Array
        (
        )

    [error_count] => 4
    [errors] => Array
        (
            [3] => Unexpected data found.
            [11] => Unexpected data found.
            [22] => Unexpected data found.
            [36] => The timezone could not be found in the database
        )

)

@whizzzkidによって要求されたキャッチ:

DateTime::__construct(): Failed to parse time string (Oct 16 2013, 10:00:00 CEST) at position 3 (&): Unexpected character
4

4 に答える 4

2

最近、CI プロジェクトで同じ問題が発生しました。私はこの方法でそれを解決しました、それは動作します:

これの代わりに:

$test = new DateTime($date_string);

また

$date_string = preg_replace('~\x{00a0}~u', ' ', $date_string);

@Leo Nyxが示唆するように、

私はこれでそれを解決しました:

$date = new DateTime(strtotime($date_string));

その下に、好きなように時刻をフォーマットします。

$date->format('d/m/Y');

もちろん、私はすでにここに投稿されたソリューションを試しました。pre_replace メソッドは機能しますが、ここに投稿したメソッドは、CPU をいくらか節約できると思います。

これを行う主な理由は、日付文字列に DateTime メソッドが認識できない文字が含まれているためです。strtotime() メソッドは、文字列を日付形式に正しく変換します。

于 2015-12-30T10:43:29.773 に答える