如何在PHP中获取指定月份的前3个月?现有代码需调整
实现基准月份及往前2个月的显示逻辑
我注意到你原来的代码是想获取未来3个月,但现在需要改成基准月份(比如2018年3月)及其往前推2个月的结果(即2018年1-3月)。先帮你指出原来代码里的两个小问题,再给出修改后的方案:
原来代码的问题
- 循环条件写错了:
$i > 3这个条件永远不会成立,循环根本不会执行,应该是$i < 3才对 - 循环体里额外写了
$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
相关产品推荐
相关产品推荐

