【发布时间】:2020-06-25 19:16:24
【问题描述】:
我有一个考勤计划,必须在 created_at 列上显示平均时间(以天为单位)。目前,我已经这样做了:
/**
* Show the average arrival time from user's attendance
* records between today and last month.
*
* @author Donny Pratama <donnypratama1024@gmail.com>
* @return \Illuminate\Http\Response
*/
public function showAverageAttendanceTime()
{
$today = Carbon::now();
$lastMonth = Carbon::now()->subDays(30);
$averageArrivalTime = auth()->user()->attendances()
->select('created_at')
->whereBetween('created_at', [$lastMonth, $today])
->avg('created_at');
return response()->json([
'success' => true,
'data' => [
'average_arrival_time' => Carbon::parse($averageArrivalTime)->toTimeString()
]
]);
}
问题是,在某些情况下,Carbon 无法解析字符串并抛出此错误:
异常:DateTime::__construct():无法在位置 12 (3) 解析时间字符串 (20200311271139.3796):文件 /Users/stechoq/Documents/Programs/Laravel/prismahr-backend/vendor/nesbot/ 中的意外字符carbon/src/Carbon/Traits/Creator.php 在第 81 行
有人可以帮帮我吗?
编辑
如果可能,我会尽量避免使用原始 SQL 查询。
【问题讨论】:
-
dd($averageArrivalTime);告诉你什么? -
它显示了这个字符串
"20200311271139.3796" -
嗯,可能是因为
avg不知道将日期视为日期。 -
是的,我想是的。我已经上网一段时间了,但无法获得有关远程时间计算的任何信息。有一堆但只接受 2 个参数,在这种情况下,我需要计算所有参数。
标签: laravel