我到处寻找一个简单的答案,但我找不到可行或满足我要求的解决方案。
我正在遍历数据,看起来与此类似:
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));
但这似乎也有效(它返回相同的小时,分钟和不同的秒)。
我希望有人可以帮助我,告诉我我做错了什么,或者有可能使我走上正确轨道的示例代码!
答案 0 :(得分:2)
$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
答案 1 :(得分:1)
当差异超过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;
答案 2 :(得分:0)
如果您只想知道如何计算时差,则无需在您的问题中提供所有代码。
一个简单的说法:'我需要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;