如何在PHP中将最近24小时时间戳按小时分组(空小时补0)
纯PHP实现时间戳按小时分组(含空小时补0)
没问题,我来给你梳理一个纯PHP的解决方案,完全不需要数据库操作,完美适配你没法用MySQL的场景~
核心思路很简单:先构建一个覆盖最近24小时所有整点的基础数组(初始值全设为0),再遍历你的时间戳数组,把每个时间戳映射到对应的小时并计数。这样就能保证哪怕某个小时没有数据,也会保留0值,不会出现缺失的情况。
具体步骤与代码示例
1. 构建最近24小时的小时骨架数组
首先我们得先确定最近24小时的每个整点,以此作为分组的基础,确保每个小时都有对应的位置:
// 获取当前时间的整点时间戳(比如现在是14:35,就取当天14:00的时间戳) $currentHour = strtotime(date('Y-m-d H:00:00')); // 初始化最近24小时的数组,键为格式化的小时字符串(如"2024-05-20 14"),值默认0 $hourlyData = []; for ($i = 23; $i >= 0; $i--) { $hourTimestamp = $currentHour - ($i * 3600); $hourKey = date('Y-m-d H', $hourTimestamp); $hourlyData[$hourKey] = 0; }
这段代码会生成从23小时前到当前小时的所有整点键,确保每个时间段都被覆盖。
2. 遍历原始时间戳并计数
假设你的原始时间戳数组是$timestamps,现在遍历它,把每个时间戳映射到对应的小时键,然后累加计数:
// 示例原始时间戳数组(替换成你自己的实际数据即可) $timestamps = [ strtotime('2024-05-20 12:15:00'), strtotime('2024-05-20 12:45:00'), strtotime('2024-05-20 14:02:00'), strtotime('2024-05-19 16:30:00'), // ... 更多时间戳数据 ]; foreach ($timestamps as $ts) { // 将时间戳转换为对应的小时键格式 $hourKey = date('Y-m-d H', $ts); // 只统计属于最近24小时内的时间戳,超出范围的自动忽略 if (isset($hourlyData[$hourKey])) { $hourlyData[$hourKey]++; } }
3. 查看最终结果
你可以用print_r($hourlyData)或者var_dump($hourlyData)来查看结果,输出会是类似这样的结构(空小时的0值会被保留):
Array ( [2024-05-19 15] => 0 [2024-05-19 16] => 1 ... [2024-05-20 12] => 2 [2024-05-20 13] => 0 [2024-05-20 14] => 1 ... [2024-05-20 14] => 0 )
额外小提示
- 如果你的时间戳是毫秒级的(比如前端传的13位时间戳),记得先除以1000转成秒级时间戳再处理。
- 如果你不需要带日期的小时键,只需要小时数(比如“12”),可以把
date('Y-m-d H', $ts)改成date('H', $ts),但要注意跨天的情况(昨天的14点和今天的14点会被合并),根据你的实际需求调整即可。
内容的提问来源于stack exchange,提问作者binoculars
相关产品推荐
相关产品推荐

