我试图用两次计算两次之间的时间差:
round(abs(strtotime("17:30") - strtotime("18:30")) / 60,2);
= '1'
哪个工作正常,但是一旦我超过2天它没有正确计算
round(abs(strtotime("17:30") - strtotime("02:00")) / 60,2);
= '15.5' this should be '8.5'
答案 0 :(得分:2)
要获得更准确和正确的结果,您可以使用->diff()功能。举个例子:
<?php
$val1 = '2014-03-18 10:34:09.939';
$val2 = '2014-03-14 10:34:09.940';
$datetime1 = new DateTime($val1);
$datetime2 = new DateTime($val2);
$interval = $datetime1->diff($datetime2);
echo $interval->format('%R%a days');
?>
<强>输出强>:
-4 days
答案 1 :(得分:1)
strtotime
返回时间戳。目前,您的计算只是部分正确,因为您忽略了负值。如果是负值(如果是第二次是第二次),则应添加86400
(24 * 60 * 60 - 一天中的秒数)。
$start = strtotime("17:30");
$end = strtotime("02:00");
$diff = $end - $start;
// end date is on the next day
if ($diff < 0) {
$diff += 86400;
}
$hours = $diff / 3600;
echo round($hours, 2);
答案 2 :(得分:0)
您可以通过将日期转换为unixtime来自行完成数学运算:
strtotime('2017-12-29 02:00')-strtotime('2017-12-28 17:30')
这将以秒为单位返回差异,因此如果我想以小时打印该值,我必须除以60两次:
php > print((strtotime('2017-12-29 02:00')-strtotime('2017-12-28 17:30'))/60/60);
8.5