2017-03-15 3 views
1

DateTime()が文字列を解析できるかどうかをチェックすることはできますか?私が試してみると:PHPのDateTime解析が可能かどうかチェック

new DateTime('05.06.17'); 

DateTime cantは例外をスローします。ですから、どうすればこれを防ぐことができ、解析が可能かどうか前に確認できますか? DateTimeが読むことができる多くの形式があります。私は正規表現でそれぞれをチェックしたくありません。

+1

私は 'date_parse'はあなたが必要とするものだと思います。無効な日付に 'false'を返します – Andy

答えて

0

date_parseを使用してください。日付文字列を取り、日付の詳細を含む配列を返します。

if (date_parse($myDateSring) !== false) { 
    //valid date 
} 

$myDateSring関数は、日付部分のインデックス付き配列を返します有効な日付である場合:それは解析できない場合、それはあなたが使用することができますfalseを返します。たとえば、

print_r(date_parse("2006-12-12 10:00:00.5")); 

Array 
    (
     [year] => 2006 
     [month] => 12 
     [day] => 12 
     [hour] => 10 
     [minute] => 0 
     [second] => 0 
     [fraction] => 0.5 
     [warning_count] => 0 
     [warnings] => Array() 
     [error_count] => 0 
     [errors] => Array() 
     [is_localtime] => 
    ) 
+0

残念なことに、var_dump(date_parse('16/03/2017 17:13 '))'はtrueですが、 'new DateTime('16/03/2017 17: 13 ') 'は動作しません – Asara

+0

その場合は、結果の配列を調べ、興味のある部分を抽出する必要があります。私は答えを文書 – Andy

0

この場合の最良の選択肢は、日付が正しいかどうかを確認する機能です。

日付を作成できる場合は解析できます。

function validateDate($date, $format) { 
    $d = DateTime::createFromFormat($format, $date); 
    return $d && $d->format($format) == $date; 
} 

機能は、このanswerまたはphp.net

関数の戻り値trueまたはfalseからコピーされました。

+0

の例で更新します。問題は、前にフォーマット – Asara

+0

OK私はあなたのポイントを参照してください。私の質問は、あなたがエラーの場合に例外を好きではない理由ですか? – bobomam

関連する問題