You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 07:46:09