PHP比較兩個時間戳相差天時分秒
一、效果
二、代碼
public function test4(){
$time = time();
$beforeTime = $time - mt_rand(1000, 9999);
$afterTime = $time + mt_rand(1000, 9999);
$array = [
[
'desc' => '相等的情況:',
'time' => $time,
'see_all' => true,
],
[
'desc' => '<i>詳情信息-之前:</i>',
'time' => $beforeTime,
'see_all' => true,
],
[
'desc' => '<i>粗略信息-之前:</i>',
'time' => $beforeTime,
'see_all' => false,
],
[
'desc' => '詳情信息-之後:',
'time' => $afterTime,
'see_all' => true,
],
[
'desc' => '粗略信息-之後:',
'time' => $afterTime,
'see_all' => false,
]
];
foreach ($array as $value){
echo $value['desc'] . ' [ ' . $this->beforeTime($value['time'], $value['see_all']) . ' ]<br/>';
}
die();
}
/**
* @param $time 待計算的時間戳
* @param bool $seeAll 是否返回詳細信息:true 是; false 否
* @return string 結果數據
*/
public function beforeTime($time, $seeAll = true){
$nowTime = time();
if ($time == $nowTime){
return '時間相等,比較無意義...';
}
$suffix = $nowTime > $time ? '前' : '後'; //判斷是之前還是之後
$diffTime = abs($nowTime - $time); //求絕對值
$day = (int)($diffTime / 86400); //天
$hour = (int)($diffTime % 86400 / 3600); //時
$minute = (int)($diffTime % 86400 % 3600 / 60); //分
$second = (int)($diffTime % 86400 % 3600 % 60); //秒
//從大到小,鍵值不能互換,如果值爲0會存在鍵覆蓋問題
$timeArray = [
'天' => $day,
'時' => $hour,
'分' => $minute,
'秒' => $second
];
$string = '';
foreach ($timeArray as $key => $value){
if ($value){ //數據不爲空,則拼接
$string .= $this->addZero($value) . $key;
if (!$seeAll){
break;
}
}
}
return $string . $suffix;
}
public function addZero($data){
return ($data >= 10) ? $data : ('0' . $data);
}