1、問題 ?
假如當前時間是:2019-07-31,那麼執行程式碼:
date("Y-m-d",strtotime("-1 month"))
,輸出的是:2019-07-01,而不是:2019-06-30
針對這個問題,再做個驗證:
var_dump(date("Y-m-d", strtotime("-1 month", strtotime("2017-03-31"))));
//輸出2017-03-03
var_dump(date("Y-m-d", strtotime("+1 month", strtotime("2017-08-31"))));
//輸出2017-10-01
var_dump(date("Y-m-d", strtotime("next month", strtotime("2017-01-31"))));
//輸出2017-03-03
var_dump(date("Y-m-d", strtotime("last month", strtotime("2017-03-31"))));
//輸出2017-03-03
不難發現,只要涉及到大小月的最後一天, 都可能會有這個迷惑。
2、解決辦法
使用date新增的修正短語, 來明確這個問題, 那就是”first day of” 和 “last day of”
var_dump(date("Y-m-d", strtotime("last day of -1 month", strtotime("2017-03-31"))));
//輸出2017-02-28
var_dump(date("Y-m-d", strtotime("first day of +1 month", strtotime("2017-08-31"))));
//輸出2017-09-01
var_dump(date("Y-m-d", strtotime("first day of next month", strtotime("2017-01-31"))));
//輸出2017-02-01
var_dump(date("Y-m-d", strtotime("last day of last month", strtotime("2017-03-31"))));
//輸出2017-02-28
原文地址,出自鳥哥的部落格
本作品採用《CC 協議》,轉載必須註明作者和本文連結