3

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

错误:

致命错误:未捕获的异常 'Exception' 带有消息 'DateTime::_ construct() [datetime.--construct]:无法在位置 7 (6) 解析时间字符串 (422926860):... .php 中的意外字符:4 堆栈跟踪:#0 ... .php(4): DateTime-> _construct('422926860') #1 ... .php(424): getAge('422926860') #2 {main} 抛出/ ... .php 在第 4 行

非常感谢您!

4

1 回答 1

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; 
} 

接着 :

 if isDateValid( $yourString ) {
    $date = new DateTime($yourString);
 }
于 2012-07-05T11:34:02.350 回答