我正在使用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
中的错误吗?
答案 0 :(得分:1)
这是否可以视为PHP 7.2中的错误?
不,这是有意实现该方法的方式。您可以争辩说这是否是实现它的正确方式,但这就是是的方式。值得注意的是,即使我们所有人都认为它不适合此处,它在实施时仍会继续工作。
这里的实际答案是编写一个验证器(用于整个格式和所有部分),并通过它运行任何不受信任的输入。