有谁知道为什么这个函数在传递给它无效的日期(例如时间戳)时,尽管try-catch
仍然抛出错误?
function getAge($date){
try {
$dobObject = new DateTime($date);
$nowObject = new DateTime();
$diff = $dobObject->diff($nowObject);
}
catch (Exception $e) {
echo 'Error: ', $e->getMessage();
}
return $diff->y;
}
错误:
致命错误:未捕获的异常"异常",消息为"日期时间::_构造() [日期时间.--构造]:无法解析位置 7 (6) 处的时间字符串 (422926860):... 中的意外字符。php:4 堆栈跟踪:#0 ... .php(4): DateTime->_construct('422926860') #1 ... .php(424): getAge('422926860') #2 {main} throw in/... .第 4 行的 PHP
提前非常感谢!
Chris,你不能发现致命的错误,至少你不应该。
引用凯帕罗的话:
PHP 不会为您提供任何捕获致命错误的常规方法,因为它们真的不应该被捕获。也就是说,您不应尝试从致命错误中恢复。与输出缓冲区匹配的字符串绝对是不明智的。
如果您没有其他方法,请查看这篇文章以获取更多信息和可能的操作方法。
试试这个:
function isDateValid($str) {
if (!is_string($str)) {
return false;
}
$stamp = strtotime($str);
if (!is_numeric($stamp)) {
return false;
}
if ( checkdate(date('m', $stamp), date('d', $stamp), date('Y', $stamp)) ) {
return true;
}
return false;
}
然后:
if isDateValid( $yourString ) {
$date = new DateTime($yourString);
}