为什么在减去两次时会出现意外的小时数

时间:2013-08-01 02:56:06

标签: php datetime

我有这个简单的函数来减去时间:输入值是:

$current = '23:48:32';
$arrival = '23:41:48';

$time = date( "H:i:s", strtotime($current) - strtotime($arrival));
$waitingTime = $time; // 21:06:44

看起来分钟的差异是正确的,我不知道为什么我在分钟前得到21分。它应该是00:06:44。 任何帮助表示赞赏。 谢谢。

4 个答案:

答案 0 :(得分:4)

尝试使用gmdate()

$time = gmdate( "H:i:s", strtotime($current) - strtotime($arrival));

答案 1 :(得分:2)

您不能指望此代码为您提供间隔。

strtotime($current) - strtotime($arrival)行计算以秒为单位的时间间隔,但是当您将其传递给date时,它会假定您说出了自纪元以来的时间间隔。所以你得到$time的时区翻译价值;你必须得到9因为你可能落后于UTC

使用strtotime($current) - strtotime($arrival) / 3600小时和余数除以60分钟。然后秒

答案 2 :(得分:1)

这就是为什么PHP有DateTime& DateInterval S:

<?php
header('Content-Type: text/plain; charset=utf-8');

$current = '23:48:32';
$arrival = '23:41:48';

$current = DateTime::createFromFormat('H:i:s', $current);
$arrival = DateTime::createFromFormat('H:i:s', $arrival);

$diff = $current->diff($arrival);

unset($current, $arrival);

echo $diff->format('%H:%I:%S');
?>

输出:

00:06:44

答案 3 :(得分:1)

此代码回显00:06:44

$current='23:48:32';
$arrival='23:41:48';

$time = date( "H:i:s", strtotime($current) - strtotime($arrival));
echo $time;//00:06:44

你的问题究竟是什么?