这个问题已经以一种或另一种形式提出,但人们一直在回答过了多少天/小时/分钟/秒。我的问题不同,是的,我已经回顾了其他问题。我正在编写一个编码任务,部分要求我计算自上次登录以来已经过了多少小时(仅几小时而不是几分钟/秒)。因此,如果员工在早上9点登记,然后在4点早些时候离开:下午30点,这将是7.5小时,然后我将使用SQL语句存储在表中。
我如何计算通过的总小时数?我尝试了以下但我对这些事情并不擅长: -
$start_time = "0900";
$now = date("Hi");
$total_hours = $now - $start_time / 60;
正如我所说,这只是给了我524但是现在知道这是否正确,或者是否需要通过分裂或其他东西来转换。
请提前帮助,请提供帮助
答案 0 :(得分:1)
我会使用Unix时间戳(自1970年1月1日以来的秒数)来存储最后一次登录。从当前时间戳中减去上次登录时间戳,并将其除以3600秒以获得小时数。
$total_hours = (time() - $last_login) / 3600;
答案 1 :(得分:1)
代码存在多个问题:
$now - $start_time / 60
没有按照您期望的方式进行评估,除法运算符的值比减法运算符高precedence
($now - $start_time) / 60
您不能将登录时间存储为时间戳或日期时间列吗?使用起来会容易得多。
无论如何,为了做到这一点(在这种情况下),我使用DateTime
类:
$start_time = "0900";
$start = DateTime::createFromFormat('Hi', $start_time);
$now = new DateTime('NOW');
$diff = $start->diff($now);
$total_hours = ($diff->h * 3600 + $diff->i * 60 + $diff->s) / 3600 * ($diff->invert ? -1 : 1);
var_dump($total_hours);
此代码打印自$start_time
以来的小时数(作为浮点数)。如果 NOW 在$start_time
之前,则为否定。
如果 14:51:44 ,结果将是:
float(5.8622222222222)
如果是 05:20:31 ,结果将是:
float(-3.6580555555556)
答案 2 :(得分:0)
在您的代码中,初始化两个字符串变量,当您进行减法时,这些变量将由PHP转换为整数。
您可以使用DateTime课程来获得以小时为单位的时差。
$timeZone = new DateTimeZone('UTC');
$start = DateTime::createFromFormat('Hi', '0900', $timeZone);
$end = new DateTime('now', $timeZone);
$interval = $start->diff($end);
echo $interval->format('%h hours');