正常来说,PHP是有一个很方便的函数可以获取上个月时间的
strtotime
(PHP 4, PHP 5, PHP 7)
strtotime — 将任何英文文本的日期时间描述解析为 Unix 时间戳说明 ¶
int strtotime ( string $time [, int $now = time() ] )
今天是2016-10-31日,所以strtotime('-1 month'),应该是9月30日
echo date('Y-m-d',strtotime('-1 month'));
可是实际上,输出的是2016-10-01,不但月份没对,日也没对上。
猜测是9月没有31号,所以直接跑到10月1号了。
所以要尝试另一种写法
echo date('Y-m-d',strtotime('-1 month -1 day'));
输出:2016-09-30
这种写法是不是一定没问题的呢?
我想到还要一个特殊的月份,今年的2月29号,所以要尝试一下在2月的时候会不会出问题。
首先查表得2月29号的时间戳是1456675200
echo date('Y-m-d',1456675200); //2016-02-29
echo PHP_EOL;
echo date('Y-m-d',strtotime('-1 month',1456675200)); //2016-01-29
echo PHP_EOL;
echo date('Y-m-d',strtotime('-1 month -1 day',1456675200)); //2016-01-28
结果是两个都不对了..
所以终级写法是,先获取本月的第一天,再-1天
$time = strtotime(date('Y-m-01',1456675200));
echo date('Y-m-d',strtotime('-1 day',$time)); //2016-01-31