Этот пост почти ответил на этот вопрос для меня, но у меня есть определенная потребность, и я не нашел то, что искал там. Это лежит прямо за пределами моего опыта; не мог полностью обернуть вокруг себя голову, так что мне действительно нужна точка в правильном направлении.
Допустим, у меня есть массив следующим образом:
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 «в этом случае».
Буду признателен за любые советы. Благодаря! 🙂
У меня могут не быть лучших соглашений об именах, но здесь.
Я вычисляю интервалы между массивом дат и указанной датой. Затем я делаю вид, чтобы найти «наименьшую» разницу.
$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");
Если я правильно понимаю ваш вопрос, это решит вашу проблему.
<?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('Ymd h:i:s', $values); ?>
Просто попробуйте следующее:
$date = 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"); $baseDate = date_create('2009-10-11'); $count = count($date); for($loop=0;$count>$loop;$loop++) { $datetime = date_create($date[$loop]); $interval = date_diff($baseDate, $datetime); $newDate[$interval->format('%s')] = $date[$loop]; } ksort($newDate); foreach($newDate as $key=>$value) { echo $value; break; }
Ваш первый элемент будет иметь самую близкую дату матча.
Примечание. Пожалуйста, проверьте его перед использованием.