我有一份提交清单。每次提交都有created_at
和updated_at
时间戳。我可以做这样的事情来获取日期
foreach ($submissions as $submission) {
var_dump($submission->created_at);
var_dump($submission->updated_at);
}
假设提交一个的created_at
时间戳为2017-07-29 23:14:02.000000
,updated_at
时间戳为2017-07-29 23:16:02.000000
我知道此提交需要2分钟才能完成。
我想要计算的是所有提交的平均时间。
有没有办法在不创建多个数组的情况下实现这一目标?
由于
和
答案 0 :(得分:1)
// use collection class
$submissions = collect($submissions);
$totalDiffInSeconds = $submissions->map(function ($submission) {
// diff in seconds
return $submission->updated_at->getTimestamp() - $submission->created_at->getTimestamp();
})->sum();
// divide total diff with number of submissions, i.e. mean
$mean = $totalDiffInSeconds / $submissions->count();
您可以在此处阅读集合课程:https://laravel.com/docs/5.4/collections
答案 1 :(得分:1)
如果您使用MySQL作为数据库,则可以通过查询updated_at和created_at的unix时间戳之间的差异来生成平均值。
Model::select(DB::raw("AVG(UNIX_TIMESTAMP(updated_at) -
UNIX_TIMESTAMP(created_at)) as average_submission_time"))
->value('average_submission_time');
答案 2 :(得分:1)
您可以尝试 Carbon. A simple PHP API extension for DateTime.
已经使用laravel 5.4进行设置