2017-03-15 60 views
1

是否有可能檢查DateTime()是否可以解析字符串?當我嘗試例如:php檢查是否可以解析日期時間

new DateTime('05.06.17'); 

DateTime不能解析它,並會拋出一個異常。那麼,如何解決這個問題並在之前檢查解析是否可行呢?有很多可能的格式DateTime可以閱讀,我不想用正則表達式檢查每個格式...

+1

我認爲'date_parse'是你需要的。它將在無效日期返回'false' – Andy

回答

0

使用date_parse它將採用日期字符串並返回包含日期詳細信息的數組。如果它不能被解析那麼它將返回false所以你可以使用:

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

如果$myDateSring是一個有效的日期函數將返回日期部分的索引數組。例如:

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'))'給出了真正的但是'新的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; 
} 

功能,從這個answerphp.net

函數返回truefalse複製。

+0

的示例更新我的答案。問題是,我不知道格式前 – Asara

+0

好吧,我明白你的觀點。我的問題是爲什麼你不喜歡在發生錯誤時出現Exception? – bobomam