2019年1月29日 星期二

php 的日期比較

在比對之前,先說明一下如何得到目前日期 在 php 5.2(含) 前可以用 date('Y-m-d') 在 php 5.2(不含) 後可以用 new DateTime() 雖然函數有一點點不同,但都需要注意時區可能產生的問題

接下來開始比較日期
使用函數 strtotime
  1. $Date1 = date('Y-m-d');
  2. $Date2 = '9999-12-31';
  3. if(strtotime($Date1) > strtotime($Date2)) {
  4. echo 'Date1 較新';
  5. }
  6. else {
  7. echo 'Date2 較新';
  8. }
基本上這樣就可以了,但是若是使用XAMPP,上面的語法可能會出現錯誤,原因在於 Y2K38漏洞,也被稱為Unix Millennium Bug,也就是 strtotime 只認得 2038-1-19 03:14:07 之前的日期時間,在此日期時間後的就會溢位,進而產生錯誤。

所以將語法修改如下,順便用了 php 5.2 版之後的語法
  1. $Date1 = date_format(new DateTime(),'U');
  2. // $Date2 = date_format(new DateTime('9999-12-31'),'U');
  3. // 這邊需要注意因為 DateTime()會包含時間的部分,所以在比較時要同時加上時間的部分(或去除時間的部分)來比較會較正確,
  4. // 或是將 $Date2 多加一天後再比較也行,所以將 $Date2 修改一下
  5. $Date2 = date_format(date_modify(new DateTime('9999-12-31'),'+1 days'),'U');
  6. if($Date1 > $Date2) {
  7. echo 'Date1 較新';
  8. }
  9. else {
  10. echo 'Date2 較新';
  11. }
參考資料/來源: 藍色小舖 php 討論區- 日期的比較 PHP轉換超過2038年的日期出錯問題解決

沒有留言:

張貼留言