M. Ginkel M. Ginkel - 3 years ago 184
PHP Question

Show closest date with name

In this post, there is an answer that shows the following code:

<?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);


Instead of showing the date, how can I show the number? In this case: 2.

Thanks for the help.

Answer Source

To calculate nearest key of given date value

$arr =['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"];
$date = "2013-02-04 14:11:16";
$near = "";
$lowest = 0;
foreach($arr as $key=>$value){
  $diff = abs(strtotime($date)-strtotime($value));
  if(!$lowest || $diff < $lowest) {
    $near = $key;
    $lowest = $diff;
  }
}
print_r("Nearest key is : $near");

Live demo : https://eval.in/872057

Output will be For

2013-02-04 => 2 // its near to date 2013-02-05

2013-02-06 => 2 // again its near to date 2013-02-05

Recommended from our users: Dynamic Network Monitoring from WhatsUp Gold from IPSwitch. Free Download