我有一个棘手的问题,我已经搜索了Stackoverflow上的每个相关问题并且都没有解决我的难题,虽然我认为我是在圈子里运行,所以这里有一个问题:< / p>
我有这段代码:
$val = (strtotime('2010-03-22 10:05:00')-strtotime('2010-03-22 09:00:00'))
这正确返回$ val = 3900(3600秒= 1小时,300秒= 5分钟)
但是这样做:
echo date("H:i",$val)."<br>";
返回02:05
即使这样做:
echo date("H:i",3900)."<br>";
返回02:05(只是为了天真地确定)
这样做:
echo date("H:i eTO",3900)."<br>";
返回
02:05 System/LocaltimeCET+0100
哪个是正确的,我的时区是CET并且是+1。
发生了什么事?由于某种原因,date()是否更正了时区?或者我做错了什么?
答案 0 :(得分:2)
这是因为使用date(,)返回纪元(1970年1月1日00:00:00 UTC)+时间戳中的秒数。它会将自己本地化为您的时区,因此如果您为其提供的时间戳为0,则将返回1970年1月1日01:00:00 UTC + 1。
答案 1 :(得分:2)
是的,它正在纠正时区。当你这样做
$val = (strtotime('2010-03-22 10:05:00')-strtotime('2010-03-22 09:00:00'))
,$val
中存储的是UTC时间01:05,1970年1月1日的时间戳。请参阅Wikipedia's article on Unix Time。
如果您正在处理两个时间戳之间的差异,我建议使用DateTime::diff(需要PHP 5.3)。
答案 2 :(得分:0)
我这样做了:
date_default_timezone_set('Europe/Helsinki');
GMT + 02:00
结果是:
03:05 Europe/HelsinkiEET+0200
所以,它实际上正在纠正时区,现在我发现解释非常简单(我有一个顿悟):date()计算秒数“1970年1月1日GMT”所以实际上是3900在我的时区和示例中,从那天起正确“02:05” ......
自我学习+1 -_-'
答案 3 :(得分:0)
这实际上是正确的行为,因为日期适用于当地时间,而您使用的是GMT +1。你给它一个时间戳(3900),即1/1/1970 1:05,它只是广告1来到你的时区。
如果这是您的预期用途,那么您只需减去机器的GMT偏移量即可获得正确的值。