平均日期之间的时间

时间:2017-08-03 13:30:57

标签: laravel date datetime

我有一份提交清单。每次提交都有created_atupdated_at时间戳。我可以做这样的事情来获取日期

foreach ($submissions as $submission) {
    var_dump($submission->created_at);
    var_dump($submission->updated_at);
}

假设提交一个的created_at时间戳为2017-07-29 23:14:02.000000updated_at时间戳为2017-07-29 23:16:02.000000我知道此提交需要2分钟才能完成。

我想要计算的是所有提交的平均时间。

有没有办法在不创建多个数组的情况下实现这一目标?

由于

3 个答案:

答案 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进行设置