PHP会话变量-查找时间差


PHP Session variable - find time difference

我试图编写的程序很简单,可以找到两个时间之间的区别:今天的时间和用户登录的时间,这两个时间放在会话变量中。

会话变量

$_SESSION['loginTime'];

设置为今天的日期

$_SESSION['loginTime'] = date('Y-m-d H:i:s');

当用户注销时,可以在单独的页面上使用以下代码找到他们登录的持续时间:

if(isset($_SESSION['loginTime']))
{
    $logTime = $_SESSION['loginTime'];
    $duration = strtotime(date('Y-m-d H:i:s')) - strtotime($logTime);
    $duration = date('H:i:s', $duration);
}

如果我现在登录(2016年4月19日22:15)并保持登录1分10秒,则返回01:01:10。我不明白额外的一小时是从哪里来的,所有的时区都是一样的。

  • 分钟和秒计算得很好,但似乎没有理由增加了1小时

感谢阅读!非常感谢您的帮助!

DateTime对象是您的朋友。

从PHP手册中,一个简单的例子如下:

$datetime1 = new DateTime('2009-10-11');
$datetime2 = new DateTime('2009-10-13');
$interval = $datetime1->diff($datetime2);
echo $interval->format('%R%a days');

你可以很容易地将你的代码调整为这样的东西:

if(isset($_SESSION['loginTime']))
{
    $logTime = new 'DateTime($_SESSION['loginTime']);
    $currentTime = new 'DateTime('now');
    $interval = $logTime->diff($currentTime);
    $duration = $interval->format('%H:%i:%s');
}
echo $duration;

示例输出:

下午15:48:57

这与夏令时无关。它通常与时区有关。$logTimenow()之间的差异通常很小,就像OP中的分钟一样。对于导致1970年1月1日时间的date。但在大多数欧洲大陆城市,格林尼治标准时间00:00是01:00。

快速解决方法是使用gmdate()而不是date()将秒的差异转换回H:i:s格式。正确的解决方案是使用DateTime对象和diff函数来获得DateInterval,正如David Wyly所建议的那样。