作者: Fred F.M. Wang (FW知識瑣記) 日期:2021-9-2
以往以PHP寫日期相關程式,習慣用strtotime函式將字串轉換為時間,並用date函式以特定的日期
格式顯示出來。但是最近遇到了2038年後的日期顯示出問題了。如何解決呢?
舊寫法 :
$date = date("Ymd",strtotime("2038-1-19"));
echo "2038-1-19 :" . $date . "<br />";
使用日期(date)函式,結果顯示 2038-1-19 :20380119
$date = date("Ymd",strtotime("2038-1-20"));
echo "2038-1-20 :" . $date . "<br />";
使用日期(date)函式, 結果顯示 2038-1-20 :19700101
由此看到日期(date)函式2038年1月20日之後的日期都無法正確顯示了
同樣要顯示日期增減也是會發生同樣的問題,當日期增加超過2038-1-20日,就無法顯示出來。
$this_date = Date("Ymd");
echo "today:" . $this_date . "<br />"; // 顯示 today:20210831
$date = date("Ymd",strtotime("+5985 days", strtotime($this_date)));
echo "add 5985 days:" . $date . "<br />"; // 顯示 add 5985 days:20380119
$date = date("Ymd",strtotime("+5986 days", strtotime($this_date)));
echo "add 5986 days:" . $date . "<br />"; // 顯示 add 5986 days:19700101
怎麼解決2038年的限制呢?
您必須改用DateTime函式來取得日期(將日期字串轉成日期),並用format函式以特定的日期格式
顯示出來
$date = new DateTime($this_date);
日期的增加則使用add函式
$date->add(new DateInterval("P6000D")); // P開頭代表日期,6000D 代表 6000 天
echo "add 6000 days:" . $date->format("Ymd"); // add 6000 days:20380203
沒有留言:
張貼留言
歡迎提供意見, 謝謝 (註 : 留言經過版主審核通過才會發布)