Grizli2007
Новичок
Доброго врмени суток!
Заранее извиняюсь за возможно глупый вопрос, из раздела новичек, но немогу никак решить.
Предистория (то что на данный момент сделал):
1) Существует два <select>’а в котором существует диапазон времени к примеру с 08:00 до 14:00.
соответственно в БД заносятся две записи начального времени и окончательного.
2) Далее когда записи добавляются 2-й раз, вычисляется предыдущие максимальное значение конечного времени и допустим выводится в <select> уже к примеру с 09:45 до 14:00, если в бд уже существует время до 09:45
3) Время хранится в секундах
Коротка на пальцах, проделываю все следующим образом:
В общем, все работает как надо,
но встал вопрос усовершенствовать.
Что если пользователь ошибся и начал вводить время не с 08:00 часов утра, а допустим с 09:00 и тут уже у нас выпадает целый час с 8 до 9.
И так «серая масса вздрогнулась» открыл я мануалы и начал курить массивы, что в итоге вышло смотрим далее… (вышла печаль)
И так кто осилил весь это бред, задаю вопрос… Как теперь все это заново переписать что бы еще учитывать, чтобы пользователь не «перепрыгивал» диапазон который уже в БД, тобишь если он выберет с 08:00 до 11:00 а в базе уже вбито что он делал сегодня что-то с 9:00 до 10:00. Убил день на написание, уже «прокурил» все виды функций для массивов. Ничего путного не смог написать, мог приводить примеры что писал но это только вас запутает, всеравно это не принесло резульатата. Прошу натолкните на мысль пожалуйста 

Заранее извиняюсь за возможно глупый вопрос, из раздела новичек, но немогу никак решить.
Предистория (то что на данный момент сделал):
1) Существует два <select>’а в котором существует диапазон времени к примеру с 08:00 до 14:00.
соответственно в БД заносятся две записи начального времени и окончательного.
2) Далее когда записи добавляются 2-й раз, вычисляется предыдущие максимальное значение конечного времени и допустим выводится в <select> уже к примеру с 09:45 до 14:00, если в бд уже существует время до 09:45
3) Время хранится в секундах

Коротка на пальцах, проделываю все следующим образом:
PHP:
//создаю массив для того чтобы в дальнейшем "занести" туда время которое уже есть в БД.
$timelist = array();
//вношу время в цикле
while($row_nar = mysql_fetch_array($result))
{
$timelist[] = $row_nar['finish_time'];
}
// далее проверяю или есть вообще что-либо в массиве если есть вычисляю максимальное конечное время
if ($timelist[0]!='')
{
$timers =
} else {
//иначе начальную точку ставлю по дефолту $start_time = 1234;
$timers = $start_time;
}
// далее в сам <select> вношу то, что получилось... $step = 300;
while ($timer < $finish_time) {
$timer = $timers;
echo "<option>".date('H:i',$timer)."</option>";
$timers = $timers + $step;
}

Что если пользователь ошибся и начал вводить время не с 08:00 часов утра, а допустим с 09:00 и тут уже у нас выпадает целый час с 8 до 9.
И так «серая масса вздрогнулась» открыл я мануалы и начал курить массивы, что в итоге вышло смотрим далее… (вышла печаль)
PHP:
if ($timelist[0]!='')
{ //масив всего времени c 8 до 14
$timelist_all = array();
$timelist_all = range($start_time, $finish_time, 300);
//переводим полный массив в часы:минуты , так подумал менее «геморней» чем потом все переводить.. сейчас уже незнаю или правильно сделал
foreach ($timelist_all as $time_all) {
$completsecondall = date('H:i',$ time_all);
$completsecondalls[] = $completsecondall;
}
//выдернул значения с массивов $maxt – максимальное в конечном времени и $mins - минимальное в начальном.
$maxt = max($timelist);
$mins = min($timestart);
//создал маленький массив (который «выдергиваю» из целого, чтобы получить нужный)
$timelist_diff = range($mins, $maxt, 300);
//перевожу в часы:минуты
foreach ($timelist_diff as $revsecond) {
$completsecond = date('H:i',$revsecond);
$completeh[]=$completsecond;
}
//отнимем из всего масива наш уже существующий $completsecondalls – полный список времени, $completeh – то что уже в БД (хотя и тут дыра есть, но это позже)
$timerss = array_diff($completsecondalls, $completeh);
//создаем список стартового времени, написано громоздко, потому что дотачивал к старому варианту, можно будет облегчить суть не в этом.
if ($timelist[0]!='')
{
foreach($timerss as $timesss) {
echo "<option>". $timesss ."</option>";
}
} else {
while ($timer < $finish_time) {
$timer = $timers;
echo "<option>".date('H:i',$timer)."</option>";
$timers = $timers + $step;
}
}
//Все выводит норм. Допустим в первом селекте идет диапазон с 8 до 9 потом выдергивается кусок что уже в базе и далее к примеру с 10:00 до 14:00 идет список далее, все как положено.
