2013-04-15 429 views
8

如何防止PHP在創建DateTime對象時崩潰?PHP DateTime異常和錯誤處理

$in = new DateTime($in); 
$out = new DateTime($out); 

$in$out都來自一個表格,以便他們可以是任何東西。我強制用戶使用日曆並使用javascript阻止日期。如果用戶可以繞過此檢查怎麼辦?

如果$in = "anything else other than a date" PHP將崩潰並阻止整個頁面的呈現。

如果PHP無法解析日期,我該如何防止這種情況,只需return(0)

+0

閱讀文檔(以下簡稱 「錯誤/例外」 部分) 。 http://php.net/manual/en/datetime.construct.php#refsect1-datetime.construct-errors –

回答

11

檢查出DateTime()的文檔,這裏有一個小片斷:

<?php 
try { 
    $date = new DateTime('2000-01-01'); 
} catch (Exception $e) { 
    echo $e->getMessage(); 
    exit(1); 
} 

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

PHP Manual DateTime::__construct()

4

strtotime()如果格式不好,將返回false,所以這應該捕獲不良格式。

if (strtotime($in) === false) 
{ 
    // bad format 
} 
+0

像魅力一樣工作... + 1 –

+0

這不適用於像「30.11.-1」這樣的值(這是0000-00-00),那麼var_dump就是int(-62169987600)。 –

3

什麼是異常處理?

try { 
    $in = new DateTime($in); 
} catch (Exception $e) { 
    echo $e->getMessage(); 
    return(0); 
} 
3

如果無法解析日期/時間字符串,DateTime constructor將拋出異常。你可以抓住它。看一看下面的代碼片段:

try { 
    $dt = new DateTime('10th - 12th June 2013'); // bad date string 
} catch (Exception $e) { 
    var_dump($e->getMessage()); 
}