Это не было проверено. Однако вы должны быть в состоянии достичь этого с помощью следующего:
$data = $user->times()
->whereYear('start_day', 2019)
->get()
->groupBy(function($entry) {
return Carbon::parse($entry->start_day)->format('m');
})->map(function ($times, $month) {
$seconds = $times->map(function ($time, $key) {
return \Carbon::parse($time->start_time)->diffInSeconds(\Carbon::parse($time->finish_time));
})->sum();
return gmdate('H:i:s', $seconds);
})->all();
После группировки месяца вы можете использовать метод сбора ->map()
, чтобы получить разницу в секундах для достижения времени в месяце.
Затем вы можете сложить все, используя ->sum()
.
Наконец, вы можете использовать gmdate()
для преобразования $seconds
в требуемый формат.
Я надеюсь, что этопомогает.
Примечание: Предполагается, что finish_time
не идет дальше start_day
, указанного в записи.