如何计算范围之间的平均created_at



我有一个考勤程序,它必须在created_at列上显示天数范围内的平均时间。目前,我已经这样做了:

/**
* Show the average arrival time from user's attendance
* records between today and last month.
*
* @author Donny Pratama <donnypratama1024@gmail.com>
* @return IlluminateHttpResponse
*/
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处的时间字符串(20200311271139.3796((3(:第81行的文件/Users/stechoq/Documents/Programs/Laravel/prismahr backend/vvendor/nebot/carbon/src/carbon/Ttracts/Creator.php中的意外字符

有人能帮我吗?

编辑

如果可能的话,我会尽量避免使用原始SQL查询。

想一想,你可以试试这样的东西:

$averageArrivalTime = auth()->user()->attendances()
->whereBetween('created_at', [$lastMonth, $today])
->avg(DB::raw('FROM_UNIXTIME(created_at)'));
Carbon::createFromTimestamp($averageArrivalTime)->toTimeString();

将日期视为一个数字,以获得准确的平均值,然后将其转换回来。

最新更新