如何根据时间戳计算特定日期的小时数?

时间:2020-07-22 13:22:11

标签: php mysql laravel

我的数据库中有一个包含用户会话的表。有两列称为started_atended_at。它们都包含时间戳。现在,我需要做的是计算一周中给定日期的小时数。因此,最终,我需要返回所有课程中的所有内容,其中350小时在星期一进行,而250小时在星期二进行,依此类推。

我尝试使用下面的代码来做到这一点。

$day = 0;
$dayTofetch = "mon";
$sessions = Session::whereRaw('WEEKDAY(sessions.started_at) = '.$dayTofetch)->get();

foreach($sessions as $session) {
    $started_at_date = new DateTime($session->started_at);
    $ended_at_date = new DateTime($session->ended_at);

    $diff = $date2->diff($date1);
    $day = $day + $diff->format('%h');
}

这可行,但是要花很多时间才能计算出来。有更有效或更简便的方法吗?

2 个答案:

答案 0 :(得分:1)

含碳:

use Carbon\Carbon;

$started_at_date = new Carbon($session->started_at);
$ended_at_date = new Carbon($session->ended_at);

$diff = $started_at_date->diffInHours($ended_at_date);

答案 1 :(得分:0)

如果您不在意将周一晚上11点至周二凌晨1点的会话计为周一的2个总小时:

   select 
   SUM( CASE WHEN date_format(started_at,'%W') = 'Monday' THEN time_to_sec( TIMEDIFF( ended_at, started_at  ) / (60 * 60) ELSE 0 END) as monday_hours,
   SUM( CASE WHEN date_format(started_at,'%W') = 'Tuesday' THEN time_to_sec( TIMEDIFF( ended_at, started_at  ) / (60 * 60) ELSE 0 END) as tuesday_hours,
   etc
   from your_table
   where user_id = 'userX'
相关问题