PHP加月份的bug问题,下个月没有的日期自动选择最后一天

这个是PHP的一个bug,就是如果本月有31天,那么在本月31日的基础上增加(或减少)n个月,如果目标月份的天数少于31,那么就会把相差的天数累加到下一个月,比如今天是2023-01-31,那么增加一个月就是2023-03-03,2月份是个特殊月份,其它的月份比如2023-03-31增加一个月会得到2023-05-01。
解决的办法最好是自己写个处理月份加减的函数,比如当要计算的日期是29、30、31时,就要做特殊的处理,其他日期就按正常方法处理。
下面的是提供的参考方法:

  // +----------------------------------------------------------------------
    // | @Des:给定时间戳 加一月 如果下一个月天数不够就自动返回下一月最后一天
    // | $time:给定的时间戳
    // | $key:加几个月
    // +----------------------------------------------------------------------
    public function accumulatedDate($time, $key)
    {
        $day = date("d", $time);
        if ($day == "29" || $day == "30" || $day == "31") {
            //获取下月最后一天
            $BeginDate = date("Y-m", strtotime("+$key month"));
            $next_month_day = date('d', strtotime("$BeginDate -1 day"));
            if ($next_month_day >= $day) {
                //如果下月最后一天大于等于$day,正常返回
                $date = date('Y-m-' . $day, strtotime("$BeginDate -1 day"));
                return strtotime($date);
            } else {
             //如果下月最后一天小于$day,返回下月最后一天
                $date = date('Y-m-d', strtotime("$BeginDate -1 day"));
                return strtotime($date);
            }
        } else {
            $date = date("Y-m-d", strtotime("+$key month", $time));
            return strtotime($date);
        }
    }
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值