strtotime的一個使用問題

我在開發過程當中遇到這麼這個問題,由於趕進度,沒有記下來處理方案,在鳥哥的博客看到原理分析,很到位!平時開發中老是急着處理問題,沒有深刻分析和記錄問題。

一、問題:

今天是2018-07-31 執行代碼:date("Y-m-d",strtotime("-1 month"))
輸出是2018-06-01?html

二、分析:

  1. 先作-1 month, 那麼當前是07-31, 減去一之後就是06-31.
  2. 再作日期規範化, 由於6月沒有31號, 因此就好像2點60等於3點同樣, 6月31就等於了7月1

2-一、驗證

var_dump(date("Y-m-d", strtotime("2017-06-31")));
//輸出2017-07-01

只要涉及到大小月的最後一天, 均可能會有這個問題code

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-二、處理方案

  1. PHP5.3以後的版本處理方式
    」first day of」 和 「last day of」, 也就是你能夠限定好不要讓date自動」規範化」htm

    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
  2. 使用mktime之類的, 把全部的日子忽略掉, 好比都限定爲每個月1號就能夠了, 只不過就不如直接用first day來的更加優雅

參考資料:http://www.laruence.com/2018/...開發

相關文章
相關標籤/搜索