Как заполнить список выбора временем?

Я хочу заполнить список выбора таким образом, чтобы он увеличивался каждые 5 минут, начиная с 00:00 до 23:55. Мне нужно сделать это и во время UNIX.

Ниже показано, что я сделал, но я только что понял, что выполнение strtotime("18:00") на самом деле не дает мне этот час конкретно. У меня также есть список выбора дат, например, дата может быть «Вторник, 6 марта 2012 г.» (с форматом unix: 1330992000). Я хочу иметь возможность взять два выбранных значения, а затем добавить две временные метки unix вместе, чтобы я мог вставить их в базу данных. Например, пользователь выбирает время 17:00, что даст мне 1332950400 (я знаю, что это неправильно), а затем дату вторник 6 марта 2012 года, что даст мне 1330992000. Затем я хочу иметь возможность сложить две метки времени вместе, чтобы получить 18:00 вторника 6 марта 2012 года в формате метки времени Unix.

public function timeSelectList()
{
    //using actual unix time instead of strtotime to save it from having to call the function each time. 
    $startTime = 1332889200; //strtotime('00:00');
    $endTime =  1332975300; //strtotime('23:55');
    $now = $startTime;

    $startSelectList = '<label for="startSelect">Start Time</label><select name="startSelect" id="startSelect">';
    $endSelectList = '<label for="endSelect">End Time</label><select name="endSelect" id="endSelect">';
    //populates the select list with the starting date of the course up to the next six months
    while($now <= $endTime)
    {
        if($now == 1332950400)// strtotime('17:00')
        {
            $startSelectList .= '<option value="'.$now.'" selected="selected">'.date('H:i', $now).'</option>';
            $endSelectList .= '<option value="'.$now.'">'.date('H:i', $now).'</option>';
        }
        else if($now == 1332954000)//strtotime('18:00')
        {
            $startSelectList .= '<option value="'.$now.'">'.date('H:i', $now).'</option>';
            $endSelectList .= '<option value="'.$now.'" selected="selected">'.date('H:i', $now).'</option>';
        }
        else
        {
            $startSelectList .= '<option value="'.$now.'">'.date('H:i', $now).'</option>';
            $endSelectList .= '<option value="'.$now.'">'.date('H:i', $now).'</option>';
        }
        $now += 300; //increment 5 minutes (300 seconds = 5 minutes
    }

    $startSelectList .= '</select>';
    $endSelectList .= '</select>';

    return $startSelectList.$endSelectList;
}

person Johnathan Au    schedule 28.03.2012    source источник


Ответы (1)


Немного непонятно, как выглядит получившаяся форма. Тем не менее, в таких ситуациях проще выполнять вычисления строк, чем вычисления дат.

Например, добавьте дату и время вместе в виде строки, а затем определите ее отметку времени.

$date_string = $date . ' ' . $time; // '2012-03-28 18:00'
$timestamp = strtotime($date_string);

Примечание. Вы, конечно же, захотите заранее выполнить некоторую проверку или форматирование строки. Но это должно быть последней частью, которая вам нужна.

person Jason McCreary    schedule 28.03.2012