寫**中常常會用到日期運算。在大多數的時候,為了方便,很有可能會簡簡單單的對乙個時間戳進行加減法運算:
$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
雖然這個問題在那些沒有夏令時的時區中並不存在,但對於有夏令時存在的時區,確實會對你的預期結果產生影響。
js日期 月份 日期加一天等
日期,在原有日期基礎上,增加days天數,預設增加1天 function adddate date,days var date new date date date.setdate date.getdate days var month date.getmonth 1 var day date.ge...
js日期 月份 日期加一天等
原文 js日期 月份 日期加一天等 日期,在原有日期基礎上,增加days天數,預設增加1天 function adddate date,days var date new date date date.setdate date.getdate days var month date.getmonth...
js日期 月份 日期加一天等
原文 js日期 月份 日期加一天等 日期,在原有日期基礎上,增加days天數,預設增加1天 function adddate date,days var date new date date date.setdate date.getdate days var month date.getmonth...