我试图编写的程序很简单,可以找到两个时间之间的区别:今天的时间和用户登录的时间,这两个时间放在会话变量中。
会话变量
$_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
这与夏令时无关。它通常与时区有关。$logTime
和now()
之间的差异通常很小,就像OP中的分钟一样。对于导致1970年1月1日时间的date
。但在大多数欧洲大陆城市,格林尼治标准时间00:00是01:00。
快速解决方法是使用gmdate()
而不是date()
将秒的差异转换回H:i:s格式。正确的解决方案是使用DateTime
对象和diff
函数来获得DateInterval
,正如David Wyly所建议的那样。