DateTime对象上的PHP异常处理

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

非常感谢你提前!

Nem*_*nja 6

克里斯,你不能发现致命的错误,至少你不应该.

引用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)