PHP中DateTime::createFromFormat返回错误日期问题解决
PHP DateTime::createFromFormat 日期返回异常问题排查
问题表现
执行如下代码:$date = DateTime::createFromFormat('D d/m', 'Mon 05/02');
预期获得2月5日的日期对象,实际返回结果为:
DateTime Object ( [date] => 2021-02-08 10:02:10.000000 [timezone_type] => 3 [timezone] => Europe/Brussels )
返回结果和预期完全不符。
问题根因
DateTime::createFromFormat方法在格式规则未指定Y(年份)参数时,会默认填充当前系统时间所属的年份- 本次场景下预期构造的是2022年的2月5日,而PHP默认填充了2021年,2021年2月5日不是周一,不符合格式规则中
D(周几)的约束,方法会自动向后偏移到最近的符合周一规则的日期,也就是2021年2月8日,最终导致返回结果异常
解决方案
调整格式规则补充年份参数Y,同时在输入的日期字符串中补充对应年份即可,修改后示例代码如下:$date = DateTime::createFromFormat('D d/m Y', 'Mon 05/02 2022');
执行后即可得到预期的2022年2月5日的日期对象。
内容的提问来源于stack exchange,提问作者Stephane Desplanque
相关产品推荐
相关产品推荐

