17

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

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

$in两者$out都来自一种形式,因此它们可以是任何东西。我强制用户使用日历并使用 javascript 将其阻止为日期。如果用户可以绕过这个检查呢?

如果$in = "anything else other than a date"PHP 会崩溃并阻塞整个页面的渲染。

return(0)如果 PHP 无法解析日期,我该如何防止这种情况发生?

4

4 回答 4

24

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

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

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

PHP 手册 DateTime::__construct()

于 2013-04-15T15:35:42.700 回答
7

strtotime()如果格式错误,将返回 false,因此这应该会捕获错误的格式。

if (strtotime($in) === false)
{
     // bad format
}
于 2013-04-15T15:35:16.027 回答
4

异常处理呢?

try {
    $in = new DateTime($in);
} catch (Exception $e) {
    echo $e->getMessage();
    return(0);
}
于 2013-04-15T15:35:36.983 回答
3

如果无法解析日期/时间字符串,构造函数将抛出异常DateTime 你可以抓住它。看看下面的代码片段:

try   {
    $dt = new DateTime('10th - 12th June 2013'); // bad date string
} catch (Exception $e) {
    var_dump($e->getMessage());
}
于 2013-04-15T15:35:37.497 回答