在 PHP 中减去时间

Posted

技术标签:

【中文标题】在 PHP 中减去时间【英文标题】:Subtract time in PHP 【发布时间】:2011-07-24 17:28:28 【问题描述】:

我已经找了几个小时的答案,但我找不到。

我正在写一个简单的script。用户设置他们的工作开始和结束时间。例如,有人从 8:00 工作到 16:00。 我怎样才能减去这个时间来看看这个人工作了多长时间?

我正在尝试strtotime();,但没有成功...

【问题讨论】:

【参考方案1】:

更好一点的是:

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

这会给您带来小时数的差异。

【讨论】:

不知道能不能把整个区间转换成秒? ->format('%S') 只是给了我间隔输出的秒部分,而不是计算的总秒数。【参考方案2】:

如果你得到有效的日期字符串,你可以使用这个:

$workingHours = (strtotime($end) - strtotime($start)) / 3600;

这将为您提供一个人的工作时间。

【讨论】:

您可以除以 60 而不是 3600 得到分钟,然后除以 60 并向下取整 (floor()) 得到整小时,剩下的分钟数%60 得到分钟。跨度> 日期('H:i',$workingHours)。我不建议在这里使用 strtottime,因为 strtotime 会返回日期的 unix 时间戳【参考方案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 时间戳格式存储,则此解决方案会更好。

【讨论】:

欢迎来到 Stack Overflow。在用现有答案回答一个八年前的问题时,指出您的答案所针对的问题的哪些新方面很有用。通过添加解释,包括代码解决问题的原因和方式,几乎总是可以改进仅代码的答案。

以上是关于在 PHP 中减去时间的主要内容,如果未能解决你的问题,请参考以下文章

php时间输出结果减去一分钟

如何从Javascript日期中减去php日期

如何从 MySQL 中的日期时间中减去小时数?

PHP,需要从 DateTime 中减去 12 小时 30 分钟

从 Timestamp php 中减去 6 个月的最简单方法是啥

使用 Freemarker 从内容中减去 img 标签