phpdatestrtotime

How to get closest date compared to an array of dates in PHP


This post almost answered this question for me, but I have a specific need and didn't find what I sought there. This lies right outside my experience; couldn't quite wrap my head around it, so all I really need is a point in the right direction.

Let's say I have an array as follows:

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" 
}

I would like to have a way to provide a date ("2013-02-04 14:11:16", for instance), and have a function determine the closest match to this in the array (which would be "2013-02-05 16:25:07" in this case).

I'd appreciate any tips. Thanks! :)


Solution

  • I may not have the best naming conventions, but here goes.

    I calculate the intervals between the array of dates and the given date. I then do a sort, to find the "smallest" difference.

    $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");