PHP獲取上個月最后一天的一個容易忽略的問題


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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM