正常來說,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