hh:mm:ss返回错误的答案在php
我正在使用此代码来计算时间段。事实上,我想要两个HH:MM:SS时刻之间的时间段,并且结果为HH:MM:SS格式。hh:mm:ss返回错误的答案在php
$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,并得到正确的答案,但我在我的本地机器上运行相同的代码,错了! 它是时区还是一些配置会影响结果?
请停止使用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
。
@Nordenheim @Nordenheim,我会接受解决它的答案,你的答案是好的,但有时候时间不正确,它会阻止我的代码,我不希望它发生,在我之前的方法中,即使它们不是正确的格式,如HH:MM:SS,它不会给我内部错误。你知道如何在无法创建对象的情况下忽略对象错误! –
@FarzadSalimiJazi有很多可能的答案,以'error_reporting'设置开始,并以您可能拥有的糟糕设计和实施的体系结束。这完全取决于您的代码,可能需要进行重大的重构。为了得到关于后者的建议,有[代码评论](http://codereview.stackexchange.com/) –
Everyone:我刚刚清理了很多杂乱的评论。这些意见不适合长时间讨论。请不要用它们来开始或结束战争,讨论OOP是否很棒,实验失败,或者其他什么。谢谢。 –
这是因为当你从时间2减去时间1你最终得到7;
日期函数需要时间戳,7不是时间戳。你可以用http://php.net/manual/en/datetime.diff.php来计算差值吗?
但我想,应该给我7点00:00:07! –
您应该考虑取消ini设置中的时区差异的UNIX纪元,本质上。这是1月1日'70。您可以通过添加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;
一切工作正常与我的演示。与您的代码完全相同。结果是'00:00:07'。 https://eval.in/684340 – Irvin
@伊文,我在本地机器上运行,它给了我01:00:07,它疯了!但也许它取决于时区!! ?? –
是的,它可能是。 – Irvin