2012-05-20 41 views
1

一個簡單的跟進從前面一個問題(Date functions in PHP)我有以下代碼:檢查字符串轉換爲日期在PHP

$date_str = "Jan 14th 2011"; 
$date = new DateTime($date_str); 
echo $date->format('d-m-y'); 

什麼我不知道是如果有一個簡單的方法來檢查,如果$ date_str會轉換爲日期,以便我可以在失敗時阻止錯誤?

基本上我正在尋找避免使用try catch語句,但也許這是不可能的。

+1

爲什麼你想避免的try/catch? – JJJ

+0

@Juhana好問題這是因爲我希望能夠創建一個錯誤處理程序來記錄代碼的所有問題,這不是真正的錯誤,因爲它是錯誤的輸入,需要發回給用戶以重新輸入。 – Brett

回答

6

按照the docs,DateTime構造將拋出一個異常,如果日期不能被正確解析。所以......

try { 
    $date = new DateTime($date_str); 
} catch (Exception $e) { 
    die("It puked!"); 
} 

如果您正在使用的程序界面,你會得到一個布爾值false代替,所以......

$date = date_create_from_format(...); 
if ($date === FALSE) { 
    die("It puked!"); 
} 
+0

Thanks @Marc看起來像是我能做的最好的。 – Brett

+0

不幸的是,構造函數邏輯將接受任何與簡單英語中的日期或時區表達式(絕對或相對)鬆散相似的東西,因此您會發現[像'today','last weekday -4 seconds'' ...' a * *是*有效日期](http://3v4l.org/F8p9A)。 –

1

由於DateTime類將拋出,如果不正確的值異常通過。你應該處理異常的唯一方法是使用try catch語句。

try { 
    $date = new DateTime($date_str); 
    $date->format('d-m-y'); 
} catch(Exception $e) { 
    //$e will contain the caught exception if any. 
} 

我看不到任何理由跳過嘗試catch方法。如果你想驗證輸入的日期,那麼你可能想看看PHP的checkdate功能

+0

Thannks @Ibrahim。嘿,我只是看着你的網站,目前不工作。 – Brett

+0

是的,在重新設計:) –

+0

非常困難的工作,我更喜歡'的strtotime()'http://stackoverflow.com/questions/1216564/best-method-to-input-and-validate-custom-datetime-in-php -形成 – electroid