0

所以我在 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->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" }
4

1 回答 1

1

最后登录时间应该是 23:44 UTC,而不是 Los_Angeles。(截至撰写本文时,洛杉矶还不是 2013-04-09 23:44:21!)

似乎您可能将数据库中的上次登录时间存储为 UTC,但是当退出数据库时,PHP 使用本地/默认时区,并将其视为America/Los_Angeles.

见这里:http: //3v4l.org/elbLY

请注意,我设置$now的时间与您的时间完全相同(以 UTC 为单位),并且我也在使用您的$lv时间,首先是 Los_Angeles 时区,然后是 UTC。

第一个间隔是你得到的,第二个间隔正确显示了 54 秒。

因此,您需要修复您的$user->getLastVisit()方法并确保它以 UTC 为您提供该日期,并且您的差异将起作用。

于 2013-04-10T00:24:47.210 回答