My Think

我決定的路,我將走下去

2018年9月7日 星期五

【PHP】strtotime()計算時間差

時間日期參數可看官方資料,這邊就不贅述了

一、取得今天日期

$today=date('Y-m-d H:i:s');
$todayDate=date('Y-m-d');

輸出結果:
2018-09-07 10:47:29
2018-09-07



二、現在時間小於結束時間

1.計算日期時間差

$endDay="2018-09-08 00:00:00";

echo "現在 ".$today.",結束 ".$endDay;
echo "現在時間距離結束時間差 ";
echo (strtotime($today) - strtotime($endDay))." 秒"; //計算相差之秒數
echo (strtotime($today) - strtotime($endDay))/ (60)." 分"; //計算相差之分鐘數
echo (strtotime($today) - strtotime($endDay))/ (60*60)." 小時"; //計算相差之小時數
echo floor((strtotime($today) - strtotime($endDay))/ (60*60*24))." 天"; //>=0時,則為日期已到或超過

輸出結果:



2.計算日期差

$endDate="2018-09-08";

echo "現在 ".$todayDate.",結束 ".$endDate;
echo "現在時間距離結束時間差";
echo (strtotime($todayDate) - strtotime($endDate))." 秒";
echo (strtotime($todayDate) - strtotime($endDate))/ (60)." 分";
echo (strtotime($todayDate) - strtotime($endDate))/ (60*60)." 小時"; 
echo floor((strtotime($todayDate) - strtotime($endDate))/ (60*60*24))." 天";

輸出結果:



上面 1 跟 2 的計算中會發現,雖然天數都是一樣,但計算時分秒時所算的方式不同,
單純計算日期的會比較適合於案件結束時是要在凌晨,
有點需注意的是這兩種算法在去除86400時出來的結果是不同的

3.計算除86400後

echo floor((strtotime($today) - strtotime($endDay))/ (60*60*24)/86400)." 天"; 
echo floor((strtotime($todayDate) - strtotime($todayDate))/ (60*60*24)/86400)." 天";

輸出結果:

對於日期來說確實是差一天,但對於含有時間的日期來說,其實已經歸零了,
所以,如果是用第 1 種的算法來計算案件是否已結束,需注意其案件所設定的完整日期時間,
以免發生明明案件未結束,但程式判斷上卻已CLOSE。

三、現在時間大於結束時間

程式寫法同上就不再貼了,直接顯示結果
$endDay="2018-09-05 00:00:00";
	$endDate="2018-09-05";

1.計算日期時間差


2.計算日期差


3.計算除86400後


在計算過去時間會發現到除了時分秒不同外,天數都是一樣的,所以,如果要計算過去時間差,似乎是兩者皆可使用




沒有留言:

張貼留言