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
相关产品推荐
相关产品推荐

