php strtotime时间计算陷阱

2021-03-30  本文已影响0人  布兰特

php 经常会计算当前时间的上个月,下个月是什么时候,写法如下:

    date('Y/m/d', strtotime('-1 month'));
    date('Y/m/d', strtotime('+1 month'));

但是不知道大家有没有发现,每次到每个月的最后一天的时候这个结果就经常会出异常,比如当前时间是2020年12月31号,执行下面代码时

    echo date('Y/m/d', strtotime('-1 month'));
    // 2020/12/01
    echo date('Y/m/d', strtotime('-2 month'));
     // 2020/10/31

是不是就懵了,其实我们深挖date函数会发现:
计算逻辑是下面这样的
先做 -1 month :今天是 2020/12/31,上个月的今天就是 2020/11/31
再做日期规范化:因为 11 月没有 31 号,自然成了 12 月的 1 号
而-2 month:10月31号是存在的,所以显示正常

那我该如何获取上个月的最后一天日期呢?

    echo  date('Y/m/d', strtotime('last day of -1 month'));
    //2020/11/30

完美解决!!!

上一篇下一篇

猜你喜欢

热点阅读