PHP循环给指定日期累加3个月并存储到数组的问题排查
解决PHP循环累加3个月日期结果重复的问题
嘿,这个问题我太熟了!你遇到的问题核心很简单——每次循环都在拿原始的$starting日期加3个月,而不是在上一次生成的日期基础上继续累加,所以不管循环多少次,结果自然全都是同一个2015-09-01啦。
下面给你两种靠谱的解决方案:
方法1:迭代式累加(推荐处理边缘日期场景)
每次循环后更新当前日期,让下一次的累加基于上一次的结果:
$starting = "2015-06-01 00:00:00"; $store_date = array(); $current_date = $starting; // 初始化当前日期为起始日期 for ($i = 0; $i < 20; $i++) { // 先给当前日期加3个月,再存入数组 $current_date = date('Y-m-d', strtotime($current_date . "+3 months")); $store_date[$i] = $current_date; } // 打印结果验证 print_r($store_date);
这种方式的优势是:遇到像2024-01-31这种月底日期时,strtotime会自动处理月份天数的问题(比如加1个月会变成2024-02-29,符合闰年规则),避免出现日期错误。
方法2:直接计算总累加月数
如果不需要考虑中间日期的迭代逻辑,也可以直接计算每次需要累加的总月数,基于原始起始日期一次性计算:
$starting = "2015-06-01 00:00:00"; $store_date = array(); for ($i = 0; $i < 20; $i++) { $total_months = 3 * ($i + 1); // 第1次加3个月,第2次加6个月,以此类推 $store_date[$i] = date('Y-m-d', strtotime($starting . "+{$total_months} months")); } // 打印结果验证 print_r($store_date);
这种方式代码更简洁,适合不需要跟踪中间日期状态的场景。
两种方法运行后,你都会得到期望的递增日期数组:2015-09-01、2015-12-01、2016-03-01...以此类推直到第20个元素。
内容的提问来源于stack exchange,提问作者Abilash Erikson
相关产品推荐
相关产品推荐

