PHP 中如何对时间戳中的时间进行分组而无视日期

描述


数据如下

id, year, time, type, s, datetime
88,2019/07/22,09:39,0,127,2019/7/22 9:39
89,2019/07/23,09:54,0,128,2019/7/23 9:54
...
  • 根据time或者datetime的时间部分进行分组
  • 0:00 ~ 1:00, 1:00~2:00, ... (这样分组)
  • 不管日期

我看了Carbon库好像也是对日期处理得比较多,对时间的处理貌似并不是很多,望知道如何处理的兄弟指点迷津。

《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
最佳答案

我这边处理的话应该是这样,用laravel不是很久,可能有更好的方案

$collect = collect([
    [
        'id'       => 1,
        'datetime' => '2019-10-01 01:00:00'
    ],
    [
        'id'       => 2,
        'datetime' => '2019-10-01 02:00:00'
    ],
    [
        'id'       => 3,
        'datetime' => '2019-10-01 03:00:00'
    ]
]);
$test = $collect->transform(function($item) {
    return array_merge($item, [
        'time' => Carbon::parse($item['datetime'])->hour
    ]);
})->groupBy('time');
dd($test);
4年前 评论
Rein (楼主) 4年前
讨论数量: 3

我这边处理的话应该是这样,用laravel不是很久,可能有更好的方案

$collect = collect([
    [
        'id'       => 1,
        'datetime' => '2019-10-01 01:00:00'
    ],
    [
        'id'       => 2,
        'datetime' => '2019-10-01 02:00:00'
    ],
    [
        'id'       => 3,
        'datetime' => '2019-10-01 03:00:00'
    ]
]);
$test = $collect->transform(function($item) {
    return array_merge($item, [
        'time' => Carbon::parse($item['datetime'])->hour
    ]);
})->groupBy('time');
dd($test);
4年前 评论
Rein (楼主) 4年前
pardon110

如果你给出的所有数据皆如此只要时间部分,在linux环境下一条cut命令就能解决。

4年前 评论
Rein (楼主) 4年前
ALMAS

eloquent有whereTime方法看看是不是你想要的

4年前 评论
Rein (楼主) 4年前

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!