2013-08-01 17 views
1

当我有这个简单的功能,减去时间:输入值:为什么我收到意想不到小时从其减去两次

$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。 任何帮助表示赞赏。 谢谢。

+0

为什么在将$ time设置为调用日期函数的结果之后,在最后一行使用$ waitingTime? – atk

+0

检查我的更正.. – user1960170

+0

我不能[重现问题](https://eval.in/40060)。此外,你的“修正”没有意义。关心它背后的逻辑? – HamZa

回答

4

尝试使用gmdate()

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

如果我想在不显示小时的情况下在几分钟内获得差异,我该怎么做? – user1960170

+0

将''H:我:s“'改为'”我:s“' –

+0

如果等待时间超过一个小时,那么小时不会显示,这是一个问题。如果等待时间已过去一小时,我想以分钟计算。 – user1960170

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 
2

你不能指望这个代码给你间隔。

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

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

+0

tl; dr:'date()'有助于将您的时区考虑在内,这会导致奇怪的小时值。 – michaelb958

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 

究竟是什么问题?

+0

我认为你的服务器正在使用GMT + 0时区,所以没有问题。 –

+0

您试过'$ current = '23:48:32 GMT'; $ arrival = '23:41:48 GMT';'? – ops

相关问题