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

PHP获取当前日期过去6个月:代码出现重复月份问题求助

解决PHP中获取过去6个月时重复月份的问题

我完全懂你的困惑——明明是个看起来很简单的需求,结果代码跑出来却出现了重复的月份,这其实是strtotime()处理相对月份时的一个常见“坑”。

问题原因

假设你运行这段代码的当天是2018年3月31日,当循环到$j=1时,strtotime("-1 month")会尝试计算“3月31日减去1个月”。但2018年的2月只有28天,没有31日,PHP会自动把这个“不存在的日期”调整为3月3日左右,所以最终输出的还是March 2018,这就导致了重复。

解决方案

要避开这个问题,核心思路是基于每月的第一天来计算,这样就不会出现月末日期溢出的情况。这里给你两种可行的写法:

方法一:使用DateTime类(推荐,更直观)

$currentDate = new DateTime();
for ($j = 0; $j <= 5; $j++) {
    // 克隆当前日期对象,避免修改原对象
    $targetDate = clone $currentDate;
    // 先切换到当月第一天,再减去对应月份数
    $targetDate->modify('first day of this month')->modify("-$j month");
    echo $targetDate->format("F Y") . "<br>";
}

方法二:使用mktime手动指定日期

for ($j = 0; $j <= 5; $j++) {
    // 固定使用每月1号来计算,避免月末溢出
    echo date("F Y", mktime(0, 0, 0, date('n') - $j, 1, date('Y'))) . "<br>";
}

这两种方法都能准确输出过去6个月的月份和年份,不会出现重复的情况。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 07:28:46