所以我在php中有这个代码:
$now= new \Datetime("UTC");
$lv=$user->getLastVisit();
$interval =$lv->diff($now,true);
print_r($interval);
print_r("<br>".$lv->format("Y-m-d H:i:s"));
print_r("<br>".$now->format("Y-m-d H:i:s"));
exit(0);
这是输出:
DateInterval Object ( [y] => 0 [m] => 0 [d] => 0 [h] => 6 [i] => 59 [s] => 6 [invert] => 0 [days] => 0 )
2013-04-09 23:44:21
2013-04-09 23:45:15
所以差异结果是6小时59分6秒!但如果我手动做差异我有54秒!那么这个DateTime :: diff函数出了什么问题?
编辑:
这是var_dump($ user-&gt; getLastVisit());
2013-04-09 23:54:59object(DateTime)#320 (3) { ["date"]=> string(19) "2013-04-09 23:44:21" ["timezone_type"]=> int(3) ["timezone"]=> string(19) "America/Los_Angeles" }
答案 0 :(得分:1)
上次登录时间应为UTC时间23:44,而不是Los_Angeles。 (截至本文撰写时,它仍然不是2013-04-09 23:44:21在洛杉矶!)
您似乎可能将最后一次登录时间存储在数据库中作为UTC,但是当退出数据库时,PHP使用本地/默认时区,并将其视为America/Los_Angeles
。
请注意,我将$now
设置为您所拥有的完全相同的时间(以UTC为单位),我也使用您的$lv
时间,首先是在Los_Angeles时区,然后是UTC 。
第一个间隔是你得到的,第二个间隔是正确显示54秒。
所以你需要修复你的$user->getLastVisit()
方法并确保它在UTC中提供那个日期,你的差异就可以了。