[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Поиск соседней даты
mxwuser
Есть многомерный массив, конечными значениями которого являются строки, вида даты(11.11.2011). Есть переменная $date = date("d.m.y"); (аналогична значениям массива)
Каким образом можно искать ближайшую предыдущую и ближайшую следущую дату из массива?




Спустя 31 минута, 9 секунд (16.04.2011 - 14:24) Игорь_Vasinsky написал(а):
В голове 2 варианта:

1. Вариант:
//1 день = 86400 секунд
$today = date("d.m.y"); 
$yestoday = date("d.m.y", time() + 86400);
$tomorrow = date("d.m.y", time() - 86400);

2. Вариант:
// Не давно видел такое:
$today = date("d.m.y"); 
$yestoday = date("d.m.y", strtotime("+1 days"));
$tomorrow = date("d.m.y", strtotime("-1 days");

Спустя 28 минут, 42 секунды (16.04.2011 - 14:53) mxwuser написал(а):
Может я не понял...
Вообщем, есть массив:

$date_events = array('15.03.2011', '24.03.2011', '30.03.2011', '5.04.2011', '15.04.2011', '19.04.2011', '22.04.2011');

Есть дата сегодняшняя:
$date = date("d.m.y");

И теперь мне нужно найти из этого списка предыдущую ближайшую дату, и ближайшую следующую...

Хотя сейчас предпологаю, что все перевести в функцие time(), как ты показал, найти разности всех дат массива с текущей датой, из чисел положительных чисел, выбрать самое маленькое, и перевести его обратно. Сейчас так попробую (=

Спустя 2 минуты, 43 секунды (16.04.2011 - 14:55) Игорь_Vasinsky написал(а):
Молодец, тока как я понял тебе нужно и назад и вперёд наименьшую разницу искать.

Спустя 3 минуты, 57 секунд (16.04.2011 - 14:59) mxwuser написал(а):
Сделаю это в 2 функции, просто в той которая будет искать ближайшую следующую дату, буду выбирать самое большое из отрицательных, если я все правильно понял.

Спустя 38 минут, 56 секунд (16.04.2011 - 15:38) mxwuser написал(а):
А есть ли функция обратная
strtotime();
?!

Спустя 19 минут (16.04.2011 - 15:57) Invis1ble написал(а):
mxwuser
Цитата
А есть ли функция обратная

date()

Спустя 54 минуты, 15 секунд (16.04.2011 - 16:51) Invis1ble написал(а):
можно так примерно:
$date_events = array('15.03.2011', '24.03.2011', '30.03.2011', '5.04.2011', '15.04.2011', '19.04.2011', '22.04.2011');
$date = '25.03.2011';

$timestamp = strtotime($date);
$timestamps = array_merge(array_map('strtotime', $date_events), array($timestamp));
sort($timestamps);
$k = array_search($timestamp, $timestamps);
$prev = $timestamps[$k - 1];
$next = $timestamps[$k + 1];

echo date('m.d.Y', $prev) . '<br />' . date('m.d.Y', $next);


UPDATE. Поправил. Не знаю, может это конечно и УГ :)
Интересно услышать мнение экспертов.

Спустя 5 часов, 35 минут, 13 секунд (16.04.2011 - 22:27) mxwuser написал(а):
Вот что сделал:
 
$match = array( 'arsenal' => '21.03.2011', 'mu' => '05.04.2011', 'chelsea' => '24.04.2011', 'spur' => '02.05.2011'
);
$date = date("d.m.y");
$date_unix = strtotime($date);
$last_match = array();
$futures_match = array();
foreach ($match as $key => $value)
{
if (($date_unix - strtotime($value)) > 0) {$last_match[$key] = array('date' => $value, 'unix' => strtotime($value)); } else {$futures_match[$key] = array('date' => $value, 'unix' => strtotime($value));}
}


Осталось создать 2 переменные, и засунуть туда массив, у которых минимальные\максимальные значение элемента 'unix'? Как это сделать можно? (=
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.