在PHP中减去时间

9

我已经寻找答案几个小时了,但是没有找到。

我正在编写一个简单的 脚本。用户设置他们的工作开始和结束时间。例如,某人从8:00工作到16:00。 如何减去这段时间以查看此人工作的时长?

我尝试使用strtotime()进行实验,但没有成功...

3个回答

31

以下代码更加清晰明了:

$a = new DateTime('08:00');
$b = new DateTime('16:00');
$interval = $a->diff($b);
echo $interval->format("%H");

这将给出两个时间之间的小时差异。


我想知道它是否可以将整个时间间隔转换为秒?format('%S')只给了我时间间隔输出的秒部分,而不是经过计算的总秒数。 - Aditya M P

10
如果您获得有效的日期字符串,可以使用以下代码:
$workingHours = (strtotime($end) - strtotime($start)) / 3600;

这将告诉你一个人工作的小时数。

你可以除以60而不是3600来得到分钟数,再除以60并向下取整(floor())来得到完整的小时数,并获得分钟数的余数%60来得到分钟数。 - jm_toball
1
date('H:i', $workingHours)。我不建议在此处使用strtottime,因为strtotime会将日期的Unix时间戳返回给您。 - mjspier

3
另一种解决方案是通过 Unix 时间戳整数值差异(以秒为单位)来实现。
<?php
    $start = strtotime('10-09-2019 12:01:00');
      $end = strtotime('12-09-2019 13:16:00');

      $hours = intval(($end - $start)/3600);
      echo $hours.' hours'; //in hours

      //If you want it in minutes, you can divide the difference by 60 instead
      $mins = (int)(($end - $start) / 60);
      echo $mins.' minutues'.'<br>';
?>

如果您的原始日期以Unix时间戳格式存储,则此解决方案将更好。


9
欢迎来到Stack Overflow。当回答一个八年前的问题时,指出你的答案解决了哪个新方面是有用的。仅带代码的答案几乎总是可以通过添加解释来改进,包括为什么和如何解决问题。 - Jason Aller

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