У меня странная проблема с правильным форматированием времени. Я совсем не приближаюсь к значениям записей времени.
Я группирую время по категориям и месяцам и форматирую время, чтобы не было начальных нулей и секунд.
Некоторые примеры выходных данных: Если какие-либо из моих записей временидо 10:00:00 (так что двойные цифры для часов) отформатированное время будет 00: 00
например, 09:45:00 будет отформатировано до 00:00:00, тогда оно должно быть 9: 45 11:00:00 форматируется до 12:00:00 и т. Д., Я не уверен, что здесь происходит.
public function show(User $user)
{
$data = collect(array_fill(1, 12, []))
->replace(
$user->times()
->whereYear('start_day', 2019)
->groupBy('category_id', \DB::raw('month(start_day)'))
->select([
'category_id',
\DB::raw('month(start_day) as month'),
\DB::raw('sum(duration) as duration'),
])
->orderBy(\DB::raw('month(start_day)'))
->get()
->mapToGroups(function ($item) {
return [$item['month'] => [
$item['category_id'] => $this->formatDuration($item['duration'])
]];
})
->mapWithKeys(function ($item, $key) {
return [$key => $item->collapse()];
})
)
->mapToGroups(function ($item, $key) {
$month = \DateTime::createFromFormat('!m', $key)->format('M');
return [$month => $item];
});
return view('report.show', compact('data'));
}
private function formatDuration($duration)
{
$duration = strtotime($duration);
return date('g:i',$duration);
}