我正在使用此代码计算时间段。事实上,我想要两个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,并得到正确答案,但我在本地计算机上运行相同的代码并且错误! 是时区还是某些配置会影响结果?!
答案 0 :(得分:0)
答案 1 :(得分:0)
请停止使用strtotime
和date
功能。使用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;