从靠近日期的日期数组中选择
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
我有数组
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