#php #time #drop-down-menu
#php #время #выпадающее меню
Вопрос:
Я хочу изменить время выпадающего списка. Время начинается через 1,5 часа после текущего времени. Итак, если текущее время равно 10: 31, то первое доступное время — 12:30-1:00 вечера
если текущее время — 14: 31, то первое доступное время — 14:30-15:00.
вот выпадающий список
12:30 вечера — 1:00 вечера 1:00 вечера — 1:30 вечера 1:30 вечера — 2:00 вечера 2: 00 вечера — 3:30 вечера 2: 30 вечера — 3:00 вечера 3:00 вечера — 3:30 вечера 3:30 вечера — 4:00 вечера 4: 00 вечера — 4:30 вечера 5:00 вечера — 5:30 вечера 5:30 вечера — 6:00 вечера
Любая помощь? Спасибо! Помощь высоко ценится!
Ответ №1:
Используйте time
и date
функции, округляйте до получаса.
$timeAtHalfHour = time() - ( time() % (60*30));
//$timeAtHalfHour = 90*60; //IDK IF YOU WANT THIS?
$endTime = strtotime('6:00 pm');
$numIntervals = ($endTime - $timeAtHalfHour) / (60*30);
echo "<select name='timeInterval'>";
$strTime1 = date('h:iA', $timeAtHalfHour);
foreach(range(1,$numIntervals) as $cur)
{
$thisTime = $timeAtHalfHour 30*60*$cur;
$strTime2 = date('h:iA', $thisTime);
echo "<option value=$cur>$strTime1 - $strTime2 </option><br />";
$strTime1 = $strTime2;
}
echo "</select>";
Редактировать
$timeAtHalfHour = time() - ( time() % (60*30));
//$timeAtHalfHour = 90*60; //IDK IF YOU WANT THIS?
$endTime = strtotime('6:00 pm');
$numIntervals = ($endTime - $timeAtHalfHour) / (60*30);
$strTime1a = date('h:iA', $timeAtHalfHour); $strTime2a = date('h:iA', $timeAtHalfHour 4*60*30);
$optionStr1 = ''; $optionStr2 = '';
foreach(range(1,$numIntervals) as $cur)
{
$thisTime1 = $timeAtHalfHour 30*60*$cur; $thisTime2 = $thisTime1 (60*30*4);
$strTime1b = date('h:iA', $thisTime1); $strTime2b = date('h:iA', $thisTime2);
$optionStr1 .= "<option value=$cur>$strTime1a - $strTime1b </option><br />";
$optionStr2 .= "<option value=$cur>$strTime2a - $strTime2b </option><br />";
$strTime1a = $strTime1b; $strTime2a = $strTime2b;
}
echo "<select name='firstTime'>$optionStr1</select>";
echo "<select name='secondTime'>$optionStr2</select>";
Это просто в значительной степени делает второй раз параллельным первому, всего на 4 получасовых интервала вперед.
Комментарии:
1. должен ли первым параметром быть интервал, который мы используем сейчас, или сейчас 1,5 часа? в своем вопросе вы указываете это обоими способами
2. Спасибо! отлично! но мне нужно время начала 12: 30 вечера — 1: 00 вечера и время окончания 5: 30 вечера — 6:00 вечера? как это сделать? Большое вам спасибо!
3. я думал, что время начала либо сейчас, либо сейчас 1,5 часа?
$timeAtHalfHour = strtotime('12:30 pm')
если это то, что вы хотите4. Привет, Джон, как создать два выпадающих меню, чтобы второе выпадающее меню было выбрано раньше, чем два часа в первом меню? например, у меня есть выбор 12:30pm-1: 00pm в первом выпадающем списке, а первое доступное время во втором выпадающем списке — 2:30 pm-3:00pm. Как это сделать? у тебя есть пример этого? Спасибо!
5. я не совсем уверен, к чему вы клоните, но то, что вы описываете, совсем не сложно. его всего два
<select>
с соответствующим набором<option>
символов вместо одного. обратите внимание, что для значений я просто произвольно ввожу целые числа. в зависимости от того, какая у вас следующая страница (та, которая выполняет действие формы при ее отправке), это может быть то, что вы хотите, а может и не быть. проверьте опубликованную мной правку
Ответ №2:
Что вы можете сделать, так это: — Для каждого периода времени, указанного в выпадающем списке, вычислите временную метку unix ( strtotime()
) времени начала. Затем вы вычисляете текущую временную метку ( time()
). Затем удалите все временные периоды, в которых временная метка времени начала меньше 90 * 60 секунд от текущего времени: if($curTime (90*60) > $startTimestampOfPeriod){}
Комментарии:
1. Какая часть? Вы можете посмотреть функции и как они работают на php.net и используйте их в своем приложении, я привел псевдопример.