Intereting Posts
вывод print_r в переменную Пересечение двух регулярных выражений imagecopy не работает все время избегать возврата после выхода из системы Mysql Count, чтобы вернуть ноль, если нет совпадений тестирование фильтров в laravel 4 Stop bot быстро отправляет несколько запросов. PHP + AJAX Динамически рассчитать цену продукта на основе значений настраиваемых полей при добавлении в корзину Eclipse PDT против NetBeans для разработки PHP добавление класса в form_submit в PHP Codeigniter Как преобразовать веб-страницу PHP в PDF? Параметры маршрута Laravel 4 для REST Как проверить, является ли это слово японским или английским, используя PHP Как защищать паролем файлы (изображения, видео, zip) динамически от публики и разрешать доступ только к членам? Динамическое добавление строк в таблицу HTML Использование JavaScript и получение значения текстового поля для каждого текстового поля путем отправки кнопки

Как получить ближайшую дату по сравнению с массивом дат в PHP

Этот пост почти ответил на этот вопрос для меня, но у меня есть определенная потребность, и я не нашел то, что искал там. Это лежит прямо за пределами моего опыта; не мог полностью обернуть вокруг себя голову, так что мне действительно нужна точка в правильном направлении.

Допустим, у меня есть массив следующим образом:

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

Ваш первый элемент будет иметь самую близкую дату матча.

Примечание. Пожалуйста, проверьте его перед использованием.