首页 > 解决方案 > PHP date() 增加一个小时返回值

问题描述

我正在尝试显示用户登录的时间长度。我让它工作除了一次。时间的小时部分从 1 而不是 0 开始。

这是PHP代码:

//Set the local timezone to GMT
date_default_timezone_set('Europe/London');

//Fetch the timestamp for when user logged in
$loggedins = $conn->query ("SELECT Last_Activity FROM students WHERE Full_Name = '$name'");
$loggedinr = $loggedins->fetch_assoc();
$dateloggedin = strtotime($loggedinr['Last_Activity']);

//Separate the time from the above
$timelogin = date("h:i:s", $dateloggedin);
$timenow = date("h:i:s");

//Work out the time spent logged in
$sessionlength = strtotime($timenow)-strtotime($timelogin);

$sessionlength = date("H:i:s", $sessionlength);

** 数据库中 Last_Activity 列包含:2020-07-08 10:07:58

这是HTML:

<p style="line-height: 40px">Session length: <b><?= $sessionlength?></b></p>

这是登录 13 分钟后页面显示的内容:

会话长度: 01:13: 44

以下修正显示正确的时间 (00:13:44)

$sessionlength = date("H:i:s", $sessionlength-3600); 

为什么要增加一个小时?任何建设性的帮助将不胜感激。

标签: phpsql

解决方案


我不知道为什么要增加一个小时,我认为 Siobham 的假设是最有意义的,我尝试将时区设置为简单的“欧洲”并打印正确的时间,但如果我添加巴黎,它会增加一个小时。

这似乎是一个更可靠的解决方案

date_default_timezone_set('Europe/London');
$datetime1 = new DateTime('2020-07-08 10:07:58');//start time
$datetime2 = new DateTime($timenow);//end time
$interval = $datetime1->diff($datetime2);
echo $interval->format('%H:%I:%S');

推荐阅读