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

PHP使用循环生成近12个月出现三月重复的问题如何解决?

解决PHP循环获取过去12个月出现重复月份的问题

这个问题我之前也碰到过!根源在于strtotime处理相对日期时的自动调整机制:当你从一个**大日期(比如30号、31号)**减去月份时,如果目标月份没有对应日期,PHP会自动把日期向后顺延到下一个月的有效日期。比如你运行代码时的当前日期是2020年1月30号,计算now -11 month时,会试图生成2019年2月30号——但2019年2月只有28天,这个无效日期就被自动调整成了2019年3月2号,结果就出现了两次三月。

方法1:固定锚定每月第一天

把日期锚定到每个月的第一天,就能避免大日期导致的自动跳转问题:

for ($i = 0; $i < 12; $i++) {
    // 先获取当月第一天,再减去对应月份数
    $month = date("d/m/Y", strtotime(date('Y-m-01') . " -$i month"));
    echo "$month<br>";
}

方法2:用DateTime类(更可靠推荐)

DateTime类的日期处理逻辑更清晰,也更易维护,个人更推荐这种方式:

$date = new DateTime('first day of this month');
for ($i = 0; $i < 12; $i++) {
    echo $date->format('d/m/Y') . "<br>";
    $date->modify('-1 month');
}

如果需要获取每个月的最后一天,只需要把first day of this month改成last day of this month就行,同样不会出现重复月份的问题。


内容的提问来源于stack exchange,提问作者Jefferson Hillebrecht

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.06 12:42:40