如何获取与 PHP 中的日期数组比较最接近的日期

2022-08-30 19:09:28

这篇文章几乎为我回答了这个问题,但我有一个特定的需求,并没有找到我在那里寻找的东西。这就在我的经验之外。我不能完全理解它,所以我真正需要的只是朝着正确方向的一个点。

假设我有一个数组,如下所示:

array(5) { 
    [0]=> "2013-02-18 05:14:54" 
    [1]=> "2013-02-12 01:44:03" 
    [2]=> "2013-02-05 16:25:07" 
    [3]=> "2013-01-29 02:00:15" 
    [4]=> "2013-01-27 18:33:45" 
}

我想有一种方法来提供一个日期(例如,“2013-02-04 14:11:16”),并让一个函数确定数组中与此最接近的匹配项(在这种情况下是“2013-02-05 16:25:07”)。

我很感激任何提示。谢谢!:)


答案 1

我可能没有最好的命名约定,但在这里。

我计算日期数组和给定日期之间的间隔。然后我做一个排序,找到“最小”的差异。

$dates = array
(
    '0'=> "2013-02-18 05:14:54",
    '1'=> "2013-02-12 01:44:03",
    '2'=> "2013-02-05 16:25:07",
    '3'=> "2013-01-29 02:00:15",
    '4'=> "2013-01-27 18:33:45"
);


function find_closest($array, $date)
{
    //$count = 0;
    foreach($array as $day)
    {
        //$interval[$count] = abs(strtotime($date) - strtotime($day));
        $interval[] = abs(strtotime($date) - strtotime($day));
        //$count++;
    }

    asort($interval);
    $closest = key($interval);

    echo $array[$closest];
}

find_closest($dates, "2013-02-18 05:14:55");

答案 2

如果我完全理解你的问题,那么这将解决你的问题。

测试代码

<?php
    $dates = array
    (
        '0' => "2013-02-18 05:14:54",
        '1' => "2013-02-12 01:44:03",
        '2' => "2013-02-05 16:25:07",
        '3' => "2013-01-29 02:00:15",
        '4' => "2013-01-27 18:33:45"
    );

    function closest($dates, $findate)
    {
        $newDates = array();

        foreach($dates as $date)
        {
            $newDates[] = strtotime($date);
        }

        echo "<pre>";
        print_r($newDates);
        echo "</pre>";

        sort($newDates);
        foreach ($newDates as $a)
        {
            if ($a >= strtotime($findate))
                return $a;
        }
        return end($newDates);
    }

    $values = closest($dates, date('2013-02-04 14:11:16'));
    echo date('Y-m-d h:i:s', $values);
?>

推荐