当前位置: 首页 > 知识库问答 >
问题:

DateTime对象上的PHP异常处理

公西永嘉
2023-03-14

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

错误:

致命错误:未捕获的异常'异常'与消息'DateTime::_construct()[datetime.-构造]:未能解析时间字符串(422926860)在位置7(6):意外字符'在...... php: 4堆栈跟踪:#0...... php(4):日期时间

提前非常感谢!

共有1个答案

冉永宁
2023-03-14

克里斯,你抓不到致命的错误,至少你不应该。

引用凯帕罗的话:

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);
 }
 类似资料:
  • 问题内容: 我的Java JMS有一个不稳定的问题。暂时可以正常工作,但是会不正常地抛出以下异常并减少执行。 重要的是要注意,这种情况不会停止经纪人。 问题答案: 我认为ActiveMQ 可能是 这个问题:https : //issues.apache.org/jira/browse/AMQ-2902 此问题跟踪程序线程表示它是无害的(这只是一个嘈杂的INFO级别日志消息),并且已在ActiveM

  • 本文向大家介绍PHP异常处理Exception类,包括了PHP异常处理Exception类的使用技巧和注意事项,需要的朋友参考一下 异常(Exception)用于在指定的错误发生时改变脚本的正常流程。 什么是异常? PHP 5 提供了一种新的面向对象的错误处理方法。 异常处理用于在指定的错误(异常)情况发生时改变脚本的正常流程。这种情况称为异常。 当异常被触发时,通常会发生: 当前代码状态被保存

  • 我有字符串值 是否有任何可用的函数或有效的方法将这个JSON字符串转换成Java DateTime对象,而不是一个接一个地读取字段并构建我的对象? 谢谢

  • 昨天我在一个网站上工作,我们将使用。它工作得很好等等。然而,当我现在启动它,我得到一个错误... 我们从另一个网站获得信息,该网站发布的日期如下: 2016-30-24T11:30:00.000 01:00 然而,我们只想展示: 11:30:00 小时、分钟和秒。 我们采用以下方法: 这是昨天的工作,但现在我得到以下错误: 致命错误:未捕获异常'异常'与消息'DateTime::__constru

  • 我正在php中创建一个非常简单的注册表单,当前当用户尝试注册时,将弹出一个带有succes或fail消息的javascript警报。 现在,我想捕获sql异常,以显示用户名或电子邮件是否已经在数据库中执行,而不是标准的失败消息。 这是我目前拥有的代码: 我如何检查是否电子邮件或用户名已经在数据库中?这两个变量在数据库中都是唯一的。

  • 我在输出在文件中创建的日期时遇到问题。 我一直在遵循一个关于如何创建真正基本的CMS平台的教程,帮助我了解和的一些基础知识,在我试图输出页面创建日期之前,一切都进展顺利。 这就是我得到的错误 现在,当我删除我的中的第22行时,它输出数据库中的完整日期,即,但我试图格式化它以显示像. 这是我的文件中的代码 然后在我的在我显示这个的地方,我有这个代码来格式化日期。 现在从我的中删除这个不会做任何事情,