PHP时差不能24小时工作

时间:2017-12-29 15:13:57

标签: php

我试图用两次计算两次之间的时间差:

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'

3 个答案:

答案 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