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

如何在PHP中获取指定月份的前3个月?现有代码需调整

实现基准月份及往前2个月的显示逻辑

我注意到你原来的代码是想获取未来3个月,但现在需要改成基准月份(比如2018年3月)及其往前推2个月的结果(即2018年1-3月)。先帮你指出原来代码里的两个小问题,再给出修改后的方案:

原来代码的问题

  1. 循环条件写错了:$i > 3 这个条件永远不会成立,循环根本不会执行,应该是$i < 3才对
  2. 循环体里额外写了$i++,会导致循环变量每次跳2步,即使条件改对了,也只会执行1次就退出

修改后的代码

$endDate = '2018-03-01'; // 这里替换成你的实际基准日期
$this_month = mktime(0, 0, 0, date('m', strtotime($endDate)), 1, date('Y', strtotime($endDate)));
$result_months = [];

// 循环3次,依次取基准月往前2个月、1个月、基准月本身
for ($i = 2; $i >= 0; $i--) {
    $current_month = date('F Y', strtotime("-{$i} month", $this_month));
    $result_months[] = $current_month;
}

// 可以打印结果看看
print_r($result_months);

逻辑说明

  • 我们把循环初始值设为2,每次递减1,直到0,刚好执行3次
  • 用"-{$i} month"来实现往前推月份:
    • 当i=2时,计算基准月往前2个月(2018年3月 → 2018年1月)
    • 当i=1时,计算基准月往前1个月(2018年3月 → 2018年2月)
    • 当i=0时,就是基准月本身(2018年3月)
  • 把每个月的结果存入数组,方便后续输出或使用

测试结果

如果基准日期是2018年3月,运行后会得到:

Array
(
    [0] => January 2018
    [1] => February 2018
    [2] => March 2018
)

如果你更喜欢从负数开始循环,也可以这么写,效果完全一样:

$endDate = '2018-03-01';
$this_month = mktime(0, 0, 0, date('m', strtotime($endDate)), 1, date('Y', strtotime($endDate)));
$result_months = [];

for ($i = -2; $i <= 0; $i++) {
    $current_month = date('F Y', strtotime("{$i} month", $this_month));
    $result_months[] = $current_month;
}

print_r($result_months);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 08:17:05