今兒,我遇到一個大怪物 -- 夏令蟲
╮(╯▽╰)╭,學藝不精,因為他掉進大坑裡去了。坑是這樣挖的:
以前,我為了表示當前時間的“明天”、“後天”,會用到類如下面的寫法:
$date = date(time + 3600*24*N);
殊不知,這種寫法並不安全的,請看例子:
ini_set('date.timezone','Europe/Berlin'); echo date("Y-m-d H:i:s",1382824800); echo "<br/>"; echo date("Y-m-d H:i:s",1382824800 + 1*86400); ini_set('date.timezone','Europe/Berlin'); echo date("Y-m-d H:i:s",1382824800); echo "<br/>"; echo date("Y-m-d H:i:s",1382824800 + 1*86400);
輸出的結果是
2013-10-27 00:00:00 2013-10-27 23:00:00 2013-10-27 00:00:00 2013-10-27 23:00:00
第二天被偷偷吃掉一個小時!
而且未來154天都會這樣,直到第155天,這一小時才會“被還回來”。
為什麼會這個樣子?通過查詢資料發現,原來是夏令時導致的問題,
不過,我國當前未實行夏令時,所以,這個問題對於“Asia/Shanghai”來說,暫時不會成為問題。
關於日期的格式化,還是推薦尋找使用更科學的計算方式。
以前寫的PHP代碼都有可能會因此而BUG,在這裡向以前的項目致歉了。