You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP日期解析异常:短天数月份被错误映射至下月

问题原因与解决方法

这是PHP DateTime类的已知行为,根源在于createFromFormat解析未完全指定的日期时,会用当前系统的日期补全缺失的部分。

比如你运行代码当天如果是31号,11月只有30天,31号在11月不存在,PHP就会自动把日期"滚"到12月1号,导致解析结果变成12月。同理,4、6、9月这些只有30天的月份,只要当前系统日期是31号,用My格式解析都会出现这个问题。


简便解决方法

方法1:强制重置到当月第一天

在格式字符串前加!,它会把未指定的日期部分重置为当月第一天、时间重置为00:00:00,彻底避免滚月问题:

$novDateString = 'Nov22';
$decDateString = 'Dec22';

$novDate = DateTime::createFromFormat('!My', $novDateString);
$decDate = DateTime::createFromFormat('!My', $decDateString);

echo $novDate->format('m'); // 输出11
echo $decDate->format('m'); // 输出12

方法2:解析后修正日期

如果不想修改格式字符串,可以在解析完成后调用modify方法,手动将日期设置为当月第一天:

$novDate = DateTime::createFromFormat('My', $novDateString)->modify('first day of this month');

内容的提问来源于stack exchange,提问作者sin tribu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.02 02:51:56