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

PHP如何从时间戳索引数组返回时钟时间最早最晚的原始时间戳

实现方案

方案1:单次遍历(推荐,适合大型数组)

仅需遍历数组1次,时间复杂度O(n),性能远高于多次映射或排序方案,核心思路是用时间戳对86400(一天的总秒数)取模直接得到当日时分秒对应的总秒数,同时记录对应的原始时间戳:

// 初始化极值和对应原始时间戳
$minDaySec = 86400;
$minOriginalTs = 0;
$maxDaySec = -1;
$maxOriginalTs = 0;
// 时区偏移,如中国东8区填 8*3600,UTC时区填0
$timezoneOffset = 8 * 3600;

foreach ($timestamps as $ts) {
    // 计算当前时间戳对应本地时区的当日总秒数
    $currentDaySec = ($ts + $timezoneOffset) % 86400;
    
    // 更新最小值
    if ($currentDaySec < $minDaySec) {
        $minDaySec = $currentDaySec;
        $minOriginalTs = $ts;
    }
    // 更新最大值
    if ($currentDaySec > $maxDaySec) {
        $maxDaySec = $currentDaySec;
        $maxOriginalTs = $ts;
    }
}

// 输出结果
echo "时分秒最早的原始时间:" . date('Y-m-d H:i:s', $minOriginalTs) . "\n";
echo "时分秒最晚的原始时间:" . date('Y-m-d H:i:s', $maxOriginalTs) . "\n";

方案2:沿用原有回调思路

如果你希望保留原来的callback处理逻辑,可以将原始时间戳和处理后的时分秒值绑定后再比较:

// 每个元素同时保留原始时间戳和对应时分秒的比较值
$processedList = array_map(function($ts) {
    return [
        'original' => $ts,
        'time_part' => strtotime(date('h:i:s a', $ts))
    ];
}, $timestamps);

// 按时分秒值排序
usort($processedList, function($a, $b) {
    return $a['time_part'] <=> $b['time_part'];
});

// 取首尾对应的原始时间戳
$minOriginalTs = $processedList[0]['original'];
$maxOriginalTs = $processedList[count($processedList) - 1]['original'];

原代码问题说明

原有方案中array_map仅返回了时分秒对应的当日时间戳,原始时间戳在映射后直接丢失,因此min/max返回的是当日的时间戳,输出时自然会显示为当前日期。

内容的提问来源于stack exchange,提问作者Three Year Old

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 20:24:02