关于计算当前同比日期
如果业务中有这样的需求,你可能很快就会想到,代码也许这样写:
echo date('Ymd',strtotime('20180907 -1 month'));
//output:...这都是些什么鬼,如果当前月比上一个月多,在多余的日子里去取上个月同期,会有问题。
?...当前很多人发现了这个问题,有兴趣可以看下专家解惑:
令人困惑的strtotime
引用下关键点就是date内部变化导致的结果:
先做-1 month, 那么当前是07-31, 减去一以后就是06-31...再做日期规范化, 因为6月没有31号, 所以就好像2点60等于3点一样, 6月31就等于了7月1
既然有问题,肯定就有人想到了解决问题的方式,我们看下面这段代码:
/**
* 计算上一个月的今天,如果上个月没有今天...如果上个月总天数 小于 当前月第几天, 直接返回上个月最后一天
如当前20180301 那么上个月的28小于31,直接同比上个月就是28
直接返回上个月相应第几天数据