从下午到上午计算经过的小时数的PHP代码

4

时间很令人困惑... 如何在php中计算从PM到AM经过的时间?

例如:22:00:00(晚上10点)02:00:00(凌晨2点) 应该返回 04小时,但是我的代码返回了-08小时

function hours_elapsed() 
{           
    $timestart = strtotime("22:00:00");
    $timestop = strtotime("02:00:00"); 

    $time_diff = $timestop - $timestart; //time difference

    return gmdate("h", $total_hours);
}

很明显这段代码使用24小时制进行计算,所以当然会返回-08。但是如果没有24小时的限制,当时间跨越午夜时,如何计算经过的时间呢?


4
您的代码不知道 $timestop 是第二天,因此认为经过的时间是负数。 - Dondi Michael Stroma
时间的来源是什么?它们是否以xx:xx:xx字符串的形式开始? - codewaggle
@codewaggle 我从数据库中获取了字段为 TIME 的列中的时间,格式始终为 xx:xx:xx。 - CyberJunkie
3个回答

8

-8 小时等同于 4 小时。如果数是负数,只需加上 12

$time_diff = $timestop - $timestart; //time difference

if ($time_diff < 0) {
  $time_diff += 12;
}

然而,如果您的日期间隔超过一天,则此方法无法帮助您。您需要指定日期(例如月份中的某一天),以告诉PHP这些时间是不同的。


谢谢!小时数从不超过23,所以我认为这没问题。简单解决方案 :) - CyberJunkie
如果我选择时间下午01:00:00到01:16:00,它显示的是12:16:00,但正确答案应该是00:16:00,我该如何解决? - Nadeem Ijaz

1

显然,22:00:00 是24小时制,但02:00:00可以是12小时制或者24小时制,不是吗?

同时加上日期,或者检测否定情况并加上12小时。


1
我的快速解决方案是:将较晚的日期加一天。
echo gmdate('h', strtotime('1970-00-01 02:00:00') - strtotime('1970-00-00 22:00:00'));

但是Blender的答案似乎更简单。 :)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接