从靠近日期的日期数组中选择

Choose from dates array near date

我有数组

Array
(
    [0] => 2016-02-22 00:20:00
    [1] => 2016-02-25 08:45:00
    [2] => 2016-02-25 19:10:00
    [3] => 2016-02-25 20:00:00
    [4] => 2016-02-26 15:55:00
    [5] => 2016-02-28 17:10:00
)

如何找到离当前日期最近的日期?

简单:转化为时间戳,减去搜索到的时间戳取绝对值,求最小值。

快速,假设时间戳数组已排序:使用二进制搜索找到第一个较大的元素,比较到该元素的距离与到前一个元素的距离,选择一个距离较小的元素;如果没有元素更大,则选择最后一个元素;如果第一个元素已经更大,选择第一个元素。

//Start with your array
$array = ["2016-02-22 00:20:00", "2016-02-25 08:45:00", "2016-02-25 19:10:00", "2016-02-25 20:00:00", "2016-02-26 15:55:00", "2016-02-28 17:10:00", "2016-01-22 00:00:00"];

//Set an array called $closestTime that has the time difference and the key
$closestTime = [null,null];

//Check each element in array
foreach($array as $key => $date){

    //Calculate difference between now and the time in seconds
    $diff = strtotime("now") - strtotime($date);;
    if($diff<0) $diff = $diff * -1; 

    //If $closestTime is empty, populate it
    if($closestTime[0]===null) $closestTime = [$diff,$key];

    //If $closestTime isn't empty and the current date's time difference
    //is smaller, populate $closestTime with the time difference and key
    elseif($diff < $closestTime[0]) $closestTime = [$diff,$key];
}

//Print the closest time
echo $array[$closestTime[1]];

//Outputs:
//2016-02-26 15:55:00