PHP日期时间异常和错误处理

PHP日期时间异常和错误处理,php,datetime,Php,Datetime,如何防止PHP在创建DateTime对象时崩溃 $in = new DateTime($in); $out = new DateTime($out); $in和$out都来自一个表单,因此它们可以是任何东西。我强制用户使用日历,并使用javascript将其阻止为日期。如果用户可以绕过此检查怎么办 如果$in=“日期以外的任何内容”PHP将崩溃并阻止整个页面的呈现 如果PHP无法解析日期,如何防止这种情况的发生,并返回(0)。如果格式不正确,将返回false,因此这将捕获不正确的格式 if (

如何防止PHP在创建DateTime对象时崩溃

$in = new DateTime($in);
$out = new DateTime($out);
$in
$out
都来自一个表单,因此它们可以是任何东西。我强制用户使用日历,并使用javascript将其阻止为日期。如果用户可以绕过此检查怎么办

如果
$in=“日期以外的任何内容”
PHP将崩溃并阻止整个页面的呈现

如果PHP无法解析日期,如何防止这种情况的发生,并返回(0)。

如果格式不正确,将返回false,因此这将捕获不正确的格式

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

异常处理呢

try {
    $in = new DateTime($in);
} catch (Exception $e) {
    echo $e->getMessage();
    return(0);
}
如果无法解析日期/时间字符串,
DateTime
将引发异常。你可以抓住它。请查看以下代码段:

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

查看
DateTime()
上的文档,这里有一个小片段:

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

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


阅读文档(“错误/例外”部分)。这不适用于“30.11.-1”(即0000-00-00)之类的值,var_转储则为int(-62169987600)。有趣的是,类factory DateTime::createFromFormat在无法解释字符串时不会引发异常,而是返回false。因此,它打破了OOP模型