Chr*_*ris 3 php error-handling datetime exception-handling exception
有没有人知道为什么这个函数,当传递一个无效的日期(例如时间戳)时,仍然会抛出一个错误,尽管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;
}
Run Code Online (Sandbox Code Playgroud)
错误:
致命错误:消息'DateTime :: _ construct()[datetime .-- construct]的未捕获异常'异常' :无法解析位置7(6)处的时间字符串(422926860):... .php中的意外字符:4堆栈跟踪:#0 ... .php(4):DateTime-> _construct('422926860')#1 ... .php(424):getAge('422926860')#2 {main}抛出/ ......第4行的.php
非常感谢你提前!
克里斯,你不能发现致命的错误,至少你不应该.
引用keparo:
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;
}
Run Code Online (Sandbox Code Playgroud)
然后 :
if isDateValid( $yourString ) {
$date = new DateTime($yourString);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3081 次 |
| 最近记录: |