日期时间对象上的 PHP 异常处理


PHP exception handling on DateTime object

有谁知道为什么这个函数在传递给它无效的日期(例如时间戳)时,尽管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);
 }