2016-10-07 2 views
0

У меня есть простая форма, которая позволяет пользователям вводить время начала и окончания. При подаче мне нужно создавать почасовые интервалы на каждый час между началом и временем окончания. Например, если они выбрали Start Time «3:00 вечера» и End Time «7:00 вечера» Я хотел бы создать 4 записи в моей базе данных следующим образом:Преобразование времени начала/окончания в часовые интервалы PHP

Начало Конец 3:00 вечера 4:00 вечера 4:00 вечера 5:00 вечера 5:00 вечера 6:00 вечера 6:00 вечера 7:00 вечера

Пользователи выбора из меню выбора с этими значениями:

 <option value="10:00am">10:00am</option> 
     <option value="11:00am">11:00am</option> 
     <option value="12:00pm">12:00pm</option> 
     <option value="1:00pm">1:00pm</option> 
     <option value="2:00pm">2:00pm</option> 
     <option value="3:00pm">3:00pm</option> 
     <option value="4:00pm">4:00pm</option> 
     <option value="5:00pm">5:00pm</option> 
     <option value="6:00pm">6:00pm</option> 
     <option value="7:00pm">7:00pm</option> 
     <option value="8:00pm">8:00pm</option> 
     <option value="9:00pm">9:00pm</option> 
     <option value="10:00pm">10:00pm</option> 
     <option value="11:00pm">11:00pm</option> 

Я извлекая время начала и окончания времени, как это:

$startTime = $_POST['timeStart']; 
$endTime = $_POST['timeEnd'] ; 

Я предполагаю, что мне нужно сделать foreach, но не уверен, как захватить временные интервалы в цикле и установить время начала/окончания для каждого интервала?

+1

предложение: переключить 'значения =' от ого: 00pm с использованием 24 часов (0 -23). Чем это может быть простой подсчет 'time' от вашего' timeStart' до 'timeEnd' по очень простому методу 0-23, вместо того, чтобы иметь дело со всем этим am/pm дерьмом и пытаться его очистить. – Abela

+0

Такое же предположение, что и @Abela, но я бы сделал это за несколько минут (диапазон от 0 до 1440, и вы можете указать интервал 30 на каждые полчаса или 60 на каждый час) - затем на входе вы можете выполнить калибровку/Преобразование inbto hours: minutes - также позволяет легко определить am pm. Таким образом, вы можете создать цикл для генерации параметров и их значений, и легко выполнить вычисления продолжительности и т. Д. – gavgrif

ответ

1

Следуйте традиционному подходу к использованию функций strtotime и date и проведите через ваш результат.

Попробуйте это:

$startTime = strtotime($startTime); /* Find the timestamp of start time */ 
$endTime = strtotime($endTime);  /* Find the timestamp of end time */ 
$input = array(); 
/* Run a loop from start timestamp to end timestamp */ 
for ($i = $startTime; $i < $endTime; $i+=3600) { 
    $input[] = array(
     "start_time" => date("h:ia", $i), 
     "end_time" => date("h:ia", ($i+3600)) 
    ); 
} 

Для ввода $_POST['timeStart'] = '3:00pm'; и $_POST['timeEnd'] = '7:00pm';, на выходе будет:

Array 
(
[0] => Array 
    (
     [start_time] => 03:00pm 
     [end_time] => 04:00pm 
    ) 

    [1] => Array 
    (
     [start_time] => 04:00pm 
     [end_time] => 05:00pm 
    ) 

    [2] => Array 
    (
     [start_time] => 05:00pm 
     [end_time] => 06:00pm 
    ) 

    [3] => Array 
    (
     [start_time] => 06:00pm 
     [end_time] => 07:00pm 
    ) 

) 
+0

Спасибо - похоже, что это будет трюк. Просто интересно, как мне получить значение для каждого start_time и end_time в массиве? (все еще изучаю PHP, когда я здесь). – user982124

+0

Вы имеете в виду, как использовать эти значения в запросе INSERT? –

+0

Да - для каждого из значений start_time/end_time в массиве мне нужно выполнить операцию базы данных для создания записи. Код базы данных уже установлен, мне просто нужно знать, как получить каждый из значений start_time/end_time в массиве? – user982124

Смежные вопросы