2019年1月29日 星期二

php 的日期比較

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

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

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

沒有留言:

張貼留言