【问题标题】:PHP calc difference between time greater than 24 hoursPHP计算时间大于24小时之间的差异
【发布时间】:2017-04-06 03:03:58
【问题描述】:

当时间大于 24 小时时,计算时间差的最佳方法是什么。

示例

$time1 = '76:00:00';
$time2 = '30:00:00';

// result should be 46:00:00
echo date('H:i:s', strtotime($time1) - strtotime($time2));

但这不能用这个来完成,因为它大于 24 小时。

我还在数据库中存储了这样的时间:33:30:00 我如何在 php 中将其格式化为:33:30

【问题讨论】:

  • 你为什么要这样存储时间?
  • 如果您使用普通时间戳,计算差异会容易得多
  • 我认为您需要手动计算..
  • 在数据库中,字段类型是时间。因为我只需要时间而不需要日期。

标签: php datetime time format date-formatting


【解决方案1】:

使用\DateTime\DateInterval 进行计算:

$date1 = new \DateTime('now', new DateTimeZone('UTC'));
$date2 = new \DateTime('now', new DateTimeZone('UTC'));
$time1 = new \DateInterval('PT76H');
$time2 = new \DateInterval('PT30H');

$date1->add($time1);
$date2->add($time2);

$diff = $date1->diff($date2);
echo ($diff->days * 24 + $diff->h) . $diff->format(':%I:%S');

说明: 无法直接在DateIntervals 上执行计算,因此您必须创建日期作为计算的基础。然后将两个不同的间隔添加到当前日期,并计算它们之间的差异。 diff() 返回包含总天数的 \DateInterval,您必须乘以 24 才能得到小时数,而小时数不等于一整天。

编辑:时区应指定为 UTC 以避免夏令时问题。

【讨论】:

  • 值是什么:'PT76H'和'PT30H'
  • 这些是时间间隔定义。在此处查看示例:php.net/manual/en/dateinterval.construct.php
  • 当一次大于另一次时是否可以显示负值。
  • 是的。在$diff 中有一个invert 字段,如果差值为负,则为1。您可以检查此字段并将- 添加到您的结果中。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-04-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-05-28
  • 2013-03-22
  • 1970-01-01
相关资源
最近更新 更多