PHP DateTime :: createFromFormat DATE_ATOM ISO 8601

时间:2019-02-21 09:57:47

标签: php datetime iso8601

我正在使用PHP 7.2,并尝试从字符串中创建日期,如下所示:

$dateString = '2018-12-31T01:01:01+00:00';
$converted  = DateTime::createFromFormat(DATE_ATOM), $dateString);

上面的代码片段可以正常工作并返回预期结果。

当我在上面提供的日期字符串中交换日期和月份时,会发生问题,如下所示:

$dateString = '2018-31-12T01:01:01+00:00';
$converted  = DateTime::createFromFormat(DATE_ATOM), $dateString);

我期望第二个示例返回false,但是我得到了实际的日期时间2020-07-12 01:01:01.000000

因此,由于系统接受了第二个日期,因此我无法确定第二个日期是否是正确的日期,并且我会将一些我不应该保存的内容保存到数据库中。

可以认为这是PHP 7.2中的错误吗?

1 个答案:

答案 0 :(得分:1)

  

这是否可以视为PHP 7.2中的错误?

不,这是有意实现该方法的方式。您可以争辩说这是否是实现它的正确方式,但这就是的方式。值得注意的是,即使我们所有人都认为它不适合此处,它在实施时仍会继续工作。

这里的实际答案是编写一个验证器(用于整个格式和所有部分),并通过它运行任何不受信任的输入。