PHP Laravel -查找两个时间戳之间每小时的秒数

jk9hmnmh  于 2023-06-04  发布在  PHP
关注(0)|答案(2)|浏览(179)

我正在尝试跟踪某人登录系统所花费的时间。我需要能够组总秒数花在登录到小时。一个用户可能有一个登录和注销的事件,将跨越多个小时,但我需要确保正确的秒数记录对正确的小时。
例如,如果用户在17:55登录并在18:10注销,则用户在17:00小时内将有300秒,在18:00小时内将有600秒
我已经搜索了所有的地方,但找不到一个不涉及繁琐的while循环的解决方案,我正在处理一个大型数据集,所以它必须是高效的。
如果任何人以前遇到过这个问题或有任何想法,将不胜感激。

np8igboo

np8igboo1#

因此,另一种高性能的方法是使用原始SQL。我假设你正在使用一个名为user_sessions的表。

$results = DB::table('user_sessions')
    ->select(DB::raw('HOUR(login_time) AS hour,    SUM(TIME_TO_SEC(TIMEDIFF(logout_time, login_time))) AS seconds'))->whereTime('login_time', '>=', $loginTime)
    ->whereTime('logout_time', '<=', $logoutTime)
    ->groupBy(DB::raw('HOUR(login_time)'))
    ->get();

$formattedResults = [];
foreach ($results as $result) {
    $formattedResults[] = [
        'hour' => $result->hour,
        'seconds' => $result->seconds,
    ];
}

return json_encode($formattedResults);

希望这能帮上忙。或者至少给你一个想法🙃。

s6fujrry

s6fujrry2#

您可以使用日志文件,因此当用户登录或注销时写入此文件,并在该时刻打印时间戳。
然后,您可以通过阅读该文件进行查询,并根据该条件进行分组,以秒为单位创建日期差异。
更具体的信息将是有价值的。

相关问题