hh:mm:ss差异在php中返回错误答案

时间:2016-11-24 00:24:00

标签: php datetime

我正在使用此代码计算时间段。事实上,我想要两个HH:MM:SS时刻之间的时间段,并得到HH:MM:SS格式的结果。

$time1 = strtotime('00:00:00');
$time2 = strtotime('00:00:07');
$diff = $time2 - $time1;
$diff = date('H:i:s', $diff);

我期待00:00:07,但我得01:00:07。可能是什么问题?

Irvin运行here,并得到正确答案,但我在本地计算机上运行相同的代码并且错误! 是时区还是某些配置会影响结果?!

3 个答案:

答案 0 :(得分:0)

这是因为当你从时间2减去时间1时,你最终得到7;

日期函数需要时间戳,7不是时间戳。

您可以使用http://php.net/manual/en/datetime.diff.php来计算差异吗?

答案 1 :(得分:0)

请停止使用strtotimedate功能。使用DateTime类。

如果你能更好地搜索,找到两个日期的差异已经全部结束了。例如,我的回答here。稍微改变它看起来像:

$create_time = "00:00:00";
$current_time="00:00:07";

$dtCurrent = DateTime::createFromFormat('H:i:s', $current_time);
$dtCreate = DateTime::createFromFormat('H:i:s', $create_time);
$diff = $dtCurrent->diff($dtCreate);

echo $diff->format("%H:%I:%S"); // to get HH:MM:SS format

这会返回00:00:07 有关更多格式详情,请参阅DateInterval::format

答案 2 :(得分:0)

你应该考虑在epi设置中取消时区差异的UNIX纪元。这是1970年1月1日。您可以通过添加e, O or P来检查服务器/应用的时区设置。检查this code

$time1 = strtotime('00:00:00 +0000');
$time2 = strtotime('00:00:07 +0000');
$epoch = strtotime('01 Jan 1970');
$diff = $time2 - $time1;
var_dump($time1,$time2,$epoch,$diff);
$diff = date('H:i:s', $epoch+$diff);
echo $diff;