【发布时间】:2020-09-22 06:16:13
【问题描述】:
如果第二个值超过当前时间,如何获取两个值之间的时间差?
我使用以下代码:
function time_diff($date2, $date1, $format){
$diff = abs(strtotime($date2) - strtotime($date1));
$years = floor($diff / (365*60*60*24));
$months = floor(($diff - $years * 365*60*60*24) / (30*60*60*24));
$days = floor(($diff - $years * 365*60*60*24 - $months*30*60*60*24)/ (60*60*24));
$hours = floor(($diff - $years * 365*60*60*24 - $months*30*60*60*24 - $days*60*60*24) / (60*60));
$minutes = floor(($diff - $years * 365*60*60*24 - $months*30*60*60*24 - $days*60*60*24 - $hours*60*60)/ 60);
$seconds = floor(($diff - $years * 365*60*60*24 - $months*30*60*60*24 - $days*60*60*24 - $hours*60*60 - $minutes*60));
if ($format == 'year'){
$i = $years;
}elseif ($format == 'month'){
$i = $months;
}elseif ($format == 'day'){
$i = $days;
}elseif ($format == 'hour'){
$i = $hours;
}elseif ($format == 'minutes'){
$i = $minutes;
}elseif ($format == 'second'){
$i = $seconds;
}
return $i;
}
我想获取 (数据库中保存的时间) 和 (当前时间) 之间的时间差。
一切都很好,但是当(数据库中保存的时间)过去并且它的小于(当前时间)时,此代码返回值但没有负号。
我的意思是如果时差是 2 天,它返回 2 而它应该返回 (-2) 或类似的东西因为 (数据库中保存的时间)过去了,它小于(当前时间)。
【问题讨论】:
-
为什么不用composer来解析日期呢?
-
你在这里做了很多错误的假设。 Not every day has 24 hours. Not every year has 365 days. Most months don't have 30 days. 时间计算总是依赖于一个位置(可能是一个抽象的位置,例如 UTC)。使用DateTime::diff。
标签: php