【问题标题】:PHP: DateTime::__construct() errorPHP: DateTime::__construct() 错误
【发布时间】:2016-03-12 14:00:53
【问题描述】:

我不断收到以下错误:

DateTime::__construct():在位置 0 (4) 解析时间字符串 (46-61-9481) 失败:意外字符

与 API 中的这段脚本相关

 $dob = new DateTime(str_replace('/','-',Input::post('date_of_birth')));
  $customer->date_of_birth = $dob->getTimestamp();

我在代码方面的知识非常有限,但我想知道是否有人愿意让我知道要更改哪些内容以避免这些错误。

【问题讨论】:

  • 当然不需要太多的编码知识就可以识别46-61-9481 在大多数日历系统中不太可能被识别为有效日期
  • 当客户在表单中输入错误的日期时会发生错误。不管他们输入什么,我仍然希望表单提交详细信息 - 我们可以修改与客户交谈的日期。
  • 也许先使用date_parse(),如果它没有给你一个布尔假返回,只创建DateTime对象

标签: php


【解决方案1】:

这里的问题是 DateTime() 的使用。 PHP DateTime() 需要一个有效的日期,否则会抛出异常。如果您仍想接受无效的日期输入,最好将其放在 try catch 块中。如果日期是有效的,它将运行良好,否则它将被阻塞。在 catch 块中,您可以设置一个默认日期,例如 00/00/0000 并保存到 DB。

try {
    $date = new DateTime('01-01-2016');
    $date = $date->format('m/d/Y');
} catch (\Exception $e) {
    $date = '00/00/0000';
}

echo $date;

【讨论】:

    【解决方案2】:

    46 不是一个有效的月份,也不是一个有效的月份。有效的月份或月份中的某一天永远不会以4 开头。

    日期46-61-9481 无效,因此出现错误。

    解决方案是先将validate the input date 传递给DateTime 构造函数。

    【讨论】:

    • 谢谢亚历克斯,他们输入错误的日期不是问题,我们可以在与客户交谈时修改日期,无论日期是否正确,我仍然希望提交表单正确与否。无论客户提交的日期如何,我都可以做些什么来确保提交表单。
    • 嗯,例如,您可以检查日期字符串是否有效,如果不是,您可以: 显示错误消息 $customer->date_of_birth 设置为null.
    猜你喜欢
    • 1970-01-01
    • 2012-08-08
    • 2012-05-06
    • 2021-09-12
    • 1970-01-01
    • 1970-01-01
    • 2014-03-17
    • 2018-08-18
    • 1970-01-01
    相关资源
    最近更新 更多