【问题标题】:get time between times in HH:MM:SS format以 HH:MM:SS 格式获取时间间隔
【发布时间】:2012-08-17 17:42:52
【问题描述】:

我到处都在寻找一个简单的答案,但我无法找到一个可行或满足我要求的解决方案。

我正在循环数据,看起来类似于:

Array
(
    [0] => 4c36fd909b37208b
    [1] => event:
    [2] => start_scan
    [3] => 2012-08-17 12:01:15
)
Array
(
    [0] => 4c36fd909b37208b
    [1] => sysaction:
    [2] => lower_device
    [3] => 2012-08-17 12:01:19
)
Array
(
    [0] => 4c36fd909b37208b
    [1] => event:
    [2] => how_to_use_displayed
    [3] => 2012-08-17 12:01:46
)
Array
(
    [0] => 4c36fd909b37208b
    [1] => event:
    [2] => scan_displayed
    [3] => 2012-08-17 12:01:59
)
Array
(
    [0] => 4c36fd909b37208b
    [1] => sysaction:
    [2] => layer_1_display_on_recognition
    [3] => 2012-08-17 12:02:23
)

我想计算两个日期之间的时间,结果需要采用 HH:MM:SS 格式。 在上面的示例数据中,我需要 2012-08-17 12:01:15 和 2012-08-17 12:02:23 之间的差异,应该是 00:01:08。

我尝试使用此处的代码:http://www.if-not-true-then-false.com/2010/php-calculate-real-differences-between-two-dates-or-timestamps/,但它一直返回 00:00:20

我也试过这个(第一个数组中的日期保存为 $xpTime,最后一个数组中的日期设置为 $xpEndTimeTmp):

$start = new DateTime($xpTime);
$end = new DateTime($xpEndTimeTmp);
$diff = $start->diff($end);
$xpDuration = date('H:i:s', strtotime($diff->h.':'.$diff->i.':'.$diff->s));

但这似乎也有效(它返回相同的小时、分钟和不同的秒)。

我希望有人可以帮助我,告诉我我做错了什么,或者有可以让我走上正轨的示例代码!

【问题讨论】:

标签: php date datetime


【解决方案1】:
$t1 = '2012-08-17 12:01:15';
$t2 = '2012-08-17 12:02:23';

echo gmdate("H:i:s", strtotime($t2) - strtotime($t1));

结果

00:01:08

【讨论】:

  • 不正确...用这一行替换 $t2 $t2 = "2020-09-30 12:02:23"; 并告诉我为什么它仍然打印 00:01:08 甚至区别是超过 8 年
  • @Wh1T3h4Ck5 如果他需要超过 24 小时的时差,我可以更改我的答案。
【解决方案2】:

时差超过 24 小时时,此版本也可以使用:

$start = strtotime('2012-08-17 12:01:15');
$end = strtotime('2012-08-17 12:02:23');
$delta = $end - $start;

$hours = floor($delta / 3600);
$remainder = $delta - $hours * 3600;
$formattedDelta = sprintf('%02d', $hours) . gmdate(':i:s', $remainder);
echo $formattedDelta;

【讨论】:

    【解决方案3】:

    如果您只想知道如何计算时差,则无需在您的问题中提供所有代码。
    一个简单的:“我需要 2012-08-17 12:01:15 和 2012-08-18 12:02:23 之间的区别,应该是 24:01:08”会更清楚。在这种情况下,Janis Elsts 的回答打败了我 :)

    如果您出于某种原因将示例代码放在那里,因为您还想知道如何获取第一次和最后一次,您应该查看multi-dimensional array's(结合工作时差例程)。

    因此,假设您已将所有单个数组填充到一个名为 $log 的包装数组中,那么您将执行以下操作:

    $timeDiff = strtotime(end($log)[3]) - strtotime(reset($log)[3]);
    
    $hours = floor($timeDiff / 3600);
    $remainder = $timeDiff - $hours * 3600;
    $formattedTime = sprintf('%02d', $hours) . gmdate(':i:s', $remainder);
    echo $formattedTime;
    

    【讨论】:

      猜你喜欢
      • 2019-03-26
      • 2019-01-18
      • 2011-10-28
      • 1970-01-01
      • 1970-01-01
      • 2015-12-18
      • 1970-01-01
      • 2017-07-21
      • 1970-01-01
      相关资源
      最近更新 更多