如何从具有最早和最新时钟时间的时间戳索引数组中返回时间戳?

Posted

技术标签:

【中文标题】如何从具有最早和最新时钟时间的时间戳索引数组中返回时间戳?【英文标题】:How to return the timestamps from an indexed array of timestamps with the earliest and latest clock time? 【发布时间】:2021-12-24 00:58:40 【问题描述】:

有一个带有时间戳的大数组,例如:

$timestamps = array();
for ($i = 0; $i < 5000; $i++) 
    $timestamps[] = mt_rand(strtotime('1900-01-01 00:00:00 am'), strtotime('2100-12-31 11:59:59 pm'));

现在我需要返回具有最早(最小)和最晚(最大)时钟时间的时间戳。

我的做法:

echo date('Y-m-d h:i:s a', min(array_map('callback', $timestamps)));
echo "\n";
echo date('Y-m-d h:i:s a', max(array_map('callback', $timestamps)));

function callback($timestamp) 
    return strtotime(date('h:i:s a', $timestamp));

这实际上提供了最早和最晚的时钟时间,但当然还有当前日期(今天)。

如何返回时钟时间最早和最晚的原始时间戳?

【问题讨论】:

【参考方案1】:

你可以使用下一个代码:

//run array_reduce over array
$res = array_reduce(
    $timestamps, // timestaps array
    function($res, $t) 
        // get time from timestamp
        $time = date('H:i:s', $t);

        // if result min not exists
        // or more then $time store new value to $res['min']
        if (is_null($res['min'][0]) || $time<$res['min'][0])
            $res['min'] = [$time, date('Y-m-d h:i:s a', $t)];


        // if result max not exists
        // or less then $time store new value to $res['max']
        if (is_null($res['max'][0]) || $time>$res['max'][0])
            $res['max'] = [$time, date('Y-m-d h:i:s a', $t)];

        // return updated result
        return $res;
    ,
    // define initial $res with null values
    ['min'=>[null, null], 'max'=>[null, null]]
);

Share php online

结果:

Array
(
    [min] => Array
        (
            [0] => 00:00:30
            [1] => 1997-05-03 12:00:30 am
        )

    [max] => Array
        (
            [0] => 23:59:36
            [1] => 1983-07-21 11:59:36 pm
        )

)

【讨论】:

你能详细解释一下你的代码吗? array_map() 也可以吗? 当然,添加了 cmets 谢谢! array_map() 也可以吗? 可能是。不确定。 array_map 函数用于更改给定数组的每个元素,但 array_reduce - 将数组缩减为针值 使用array_map:phpize.online/…

以上是关于如何从具有最早和最新时钟时间的时间戳索引数组中返回时间戳?的主要内容,如果未能解决你的问题,请参考以下文章

用于从表中选择具有最新时间戳的行的 JOOQ 代码

如何仅从组中查询具有最新时间戳的文档?

为每个员工选择一天中最早时间戳的完整记录[重复]

如何从具有最后时间戳的数据框中选择不同的记录

CouchDB:根据时间戳返回最新类型的文档

对于每个 ID,返回 r 中开始列的最早日期和结束列的最新日期