给定一个日期时间的数组/对象,如何返回按小时和时间排序的时间数组/对象,按星期几排序

时间:2015-06-23 02:57:55

标签: php arrays sorting datetime laravel

PHP / Laravel,我得到的对象数组包含每条记录的日期时间。

我需要每天每小时生成一次对象的分析。每周一次。

例如:

对于2015年1月1日 - 2015年1月10日的日期范围,我会返回100条记录,所有记录都有日期时间。

在这100条记录中,我需要计算一天中每小时某些事情发生的次数的分析。所以我需要一个能够返回所有记录的对象,比如凌晨1点到凌晨1点59分,凌晨2点到凌晨2点59点等,所以这样的结构呢?

{
    1 : {
        record1{},
        record2{},
        record3{},
    },
    2 : {
        record4{},
        record5{},
        record6{},
    }
}...

然后我还需要在一周中的几天计算分析,因此我需要一个包含按星期几排序的记录的对象。所以这样的结构。

{
    Monday : {
        record1{},
        record2{},
        record3{},
    },
    Tuesday : {
        record4{},
        record5{},
        record6{},
    }
}...

1 个答案:

答案 0 :(得分:1)

您可以使用Laravel的集合$records = YourModel::all(); $byHour = $records->groupBy(function($record) { return $record->your_date_field->hour; }); $byDay = $records->groupBy(function($record) { return $record->your_date_field->dayOfWeek; }); 方法将记录分组以满足您的需求。

$dates

请记住,要使用此代码,您必须在Carbon::parse模型数组中定义日期字段,以便Eloquent将日期解析为Carbon对象。如果你没有,那么你可以在返回结果之前在函数中使用$byHour = $records->groupBy(function($record) { $date = Carbon::parse($record->your_date_field); return $date->hour; }); ,如下所示

$records = YourModel::all();

$byHour = $records->groupBy(function($record) {
    return date('H', strtotime($record->your_date_field));
});

$byDay = $records->groupBy(function($record) {
    return date('D', strtotime($record->your_date_field));
});

如果你愿意,你可以在没有碳的情况下实现同样的目标

groupBy

ListView方法将以您想要的格式返回对象集合。

您可以找到有关Laravel馆藏here的更多信息。