PHP strtotime -1 month 获取上个月月份踩坑

"在PHP中,直接使用strtotime ("-1month")获取上一个月的日期可能存在错误,特别是在月末时。当日期跨越到没有该日的月份时,会返回下个月的1号。为避免此问题,应使用date('Y-m-01')结合'-1month'来正确获取上个月的月份。例如,使用date('Ym', strtotime(date('Y-m-01')."-1month"))可确保始终获取上月的整月。"
摘要由CSDN通过智能技术生成

项目中需要循环获取前几个月,但是前几天还好好的,今天突然发现错误,直接上代码(当前日期:2020-12-31)

public function testB()
{
    for ($i=5; $i>=0; $i--) {
       $month = date('Ym', strtotime(" - $i month"));
       echo $month . PHP_EOL;
    }
}
//输出(当前日期2020-12-31)
//202007
//202008
//202010
//202010
//202012
//202012

为什么呢今天不行了呢?打印 $i 也是正常的,查阅资料之后发现当获取上个月的日期时 直接使用 date('Ym', strtotime("-1 month") 是有坑的:

当上一个月或者下一个月没有今天的日时,会输出错误,比如今天是12月31号,但是11月份没有31号,此时date('Y-m-d',strtotime("-1 month")); 输出的结果就是 2020-12-01
 
同理,当在3月31号/5月31号/7月31号/10月31号/12月31号执行date('Y-m-d',strtotime("-1 month"))时,得到的结果是 3月1号/5月1号//7月1号/10月1号/12月1号。
 
如何正确的获取上一个月份?
因为每月都有1号,如果需要获取上一个月的月份,可以使用以下的方式获取:
 
date('Ym', strtotime(date('Y-m-01') . " - 1 month"));
 
public function testB()
{
    for ($i=5; $i>=0; $i--) {
       $month = date('Ym', strtotime(date('Y-m-01') . " - $i month"));
       echo $month . PHP_EOL;
    }
}
//输出(当前日期2020-12-31)
//202007
//202008
//202009
//202010
//202011
//202012

同样如果获取上个月的第一天  date('Y-m-01', strtotime(date('Y-m-01') . " - 1 month")); 而不能简单使用 date('Y-m-01', strtotime("-1 month"));

请各位小伙伴避免采坑~

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值