寫程式碼中常常會用到日期運算。在大多數的時候,為了方便,很有可能會簡簡單單的對一個時間戳進行加減法運算:
$time = mktime(0, 0, 0, 8, 28, 2015); $one_hour_later = date('Y-m-d H:i:s', $time + 3600);
這是一條簡單的獲取一小時後時間戳的代碼,但如果放大到天以上的單位時,這個時間戳真的是你想要的嗎?
比如,你有了某一天0點的時間戳,想知道5天後0點的時間戳,簡單的加上5*86400後的時間對嗎?
$time = mktime(0, 0, 0, 3, 8, 2015); $five_day_later = date('Y-m-d H:i:s', $time + 5 * 86400); echo $five_day_later;
>> 2015-03-13 00:00:00
貌似沒有問題。但換一個地方的人執行呢?
// 时区设置为美国芝加哥 date_default_timezone_set('America/Chicago'); $time = mktime(0, 0, 0, 3, 8, 2015); $five_day_later = date('Y-m-d H:i:s', $time + 5 * 86400); echo $five_day_later;
>> 2015-03-13 01:00:00
怎麼不是5天後的0點了呢?
當然,這個關鍵的問題就出在夏令時上(具體夏令時的原理就不介紹了,可以自行百度)。
解決方法:使用strtotime函數而不是用加減法
// 时区设置为美国芝加哥 date_default_timezone_set('America/Chicago'); $time = mktime(0, 0, 0, 3, 8, 2015); $five_day_later = date('Y-m-d H:i:s', strtotime('+5 days', $time)); echo $five_day_later;>> 2015-03-13 00:00:00
雖然這個問題在那些沒有夏令時的時區中並不存在,但對於有夏令時存在的時區,確實會對你的預期結果產生影響。
版權聲明:本文為部落客原創文章,未經部落客允許不得轉載。
以上就介紹了1天 等於 86400 秒? ,包括了方面的內容,希望對PHP教程有興趣的朋友有所幫助。