Время PHP Время цикла полтора часа? - PullRequest
1 голос
/ 30 июня 2011

Я хочу знать, как зациклить время на полтора часа в php. Я хочу, чтобы вывод был таким:

<select style='width:250px;' name='days' onchange='return timeSchedvalue(this.value)'>
  <option value='6:00-6:30 am'>6:00-7:30 am</option>
  <option value='6:30-7:00 am'>6:30-7:00 am</option>
  <option value='7:30-8:00 am'>7:30-8:00 am</option>
  <option value='8:00-8:30 am'>8:00-8:30 am</option>
  <option value='8:30-9:00 am'>8:30-9:00 am</option>
  <option value='9:00-9:30 am'>9:00-9:30 am</option>
  <option value='9:30-10:00 am'>9:30-10:00 am</option>
  <option value='10:00-10:30 am'>10:00-10:30 am</option>
  <option value='10:30-11:00 am'>10:30-11:00 am</option>
  <option value='11:00-11:30 am'>11:00-11:30 am</option>
  <option value='11:30-12:00 am'>11:30-12:00 am</option>
  <option value='12:00-12:30 pm'>12:00-12:30 pm</option>
</select>

Цикл начнется в 6:00 - 6:30утра и закончится к 22:00 - 22:30

Спасибо!

Помощь Очень признателен.

Ответы [ 8 ]

7 голосов
/ 30 июня 2011
$time = mktime(0, 0, 0, 1, 1);
for ($i = 0; $i < 86400; $i += 1800) {  // 1800 = half hour, 86400 = one day
    printf('<option value="%1$s-%2$s">%1$s-%2$s</option>',
           date('g:i', $time + $i), date('g:i a', $time + $i + 1800));
}

Скрипка с начальным временем и конечным условием, как требуется.

2 голосов
/ 04 сентября 2011

Используйте это, если хотите.

for ($x = 6,$x1 = 1; $x < 22.5; $x+=0.5,$x1++) 
{ 
$gen_date=date('h:i A', mktime(0, 0, 0) + (60 * $x * 60));
$temp=$x+0.5;
$gen_date1=date('h:i A', mktime(0, 0, 0) + (60 * $temp * 60));
echo $x1.'='.$gen_date.'-'.$gen_date1.'<br>';
}

Используйте $ x1 в качестве индекса.отредактируйте согласно вашей потребности

2 голосов
/ 30 июня 2011
<select style='width:250px;' name='days' onchange='return timeSchedvalue(this.value)'>
<?php
     $time = '6:00'; // start
     for ($i = 0; $i <= 12; $i++)
     {
         $prev = date('g:i a', strtotime($time)); // format the start time
         $next = strtotime('+30mins', strtotime($time)); // add 30 mins
         $time = date('g:i a', $next); // format the next time
         echo "<option value=\"$prev - $time\">$prev - $time</option>";
     }
 ?>
</select>
1 голос
/ 30 июня 2011

Вы можете создать время с помощью mktime и отформатировать его с помощью date .

В вашем случае вам нужно создать время начала 6:00 -> mktime (6, 0, 0, 0, 0, 0)

тогда вам нужно добавить 30 минут для каждого следующего раза ...

Это легко сделать в цикле for:

<select style='width:250px;' name='days' onchange='return timeSchedvalue(this.value)'>
<?php
 for ($i = 0; $i <= 960; $i+=30) {
    $time1 = date('h:i a', mktime(6, $i, 0, 0, 0, 0));
    $time2 = date('h:i a', mktime(6, $i+30, 0, 0, 0, 0));
    echo "<option value='" . $time1 . " - " . $time2 . "'>" .$time1 . " - " . $time2 . "</option>";
}
?>
</select>
1 голос
/ 30 июня 2011

Что ж, самый простой способ - сохранить массив всех ваших интервалов и пройти через него, например, как:

array ('06:00', '06:30', '07:00', '07:30'... );

Или может быть как:

array ('06:00 - 06:30', '06:30 - 07:00', '07:00 - 07:30'...);
0 голосов
/ 30 июня 2011
<?php

    $timeFormat = "%02d:%02d";
    $startHour = 6;
    $endHour = 12;
    $timeInterval = 30; // in minutes

    $currentHour = $startHour;
    $currentMinute = 0;
    while ($currentHour <= $endHour) {
        $timeRange = sprintf($timeFormat, $currentHour, $currentMinute) . ($currentHour < 12 ? " am" : " pm");

        $currentMinute = $currentMinute + $timeInterval;
        if ($currentMinute > 59) {
            $currentHour++;
            $currentMinute = $currentMinute - 60;
        }

        $timeRange .= " - " . sprintf($timeFormat, $currentHour, $currentMinute) . ($currentHour < 12 ? " am" : " pm");

        if ($currentHour <= $endHour) {
            echo "## " . $timeRange . "\n";         
        }       
    }

?>
0 голосов
/ 30 июня 2011

Это просто перебирает каждую половину нашего, а затем вызывает дату каждого.

$inc   = 30 * 60;
$start = (strtotime('6AM')); // 6  AM
$end   = (strtotime('10PM')); // 10 PM

echo "<select>";
for( $i = $start; $i <= $end; $i += $inc )
{
    // to the standart format
    $range = date( 'g:i', $i ) . ' - ' . 
             // $inc = 30 minutes so this will be .5 hr later
             date( 'g:i A', $i + $inc );
    echo "<option value=\"$range\">$range</option>" . PHP_EOL;
}
echo "</select>";
0 голосов
/ 30 июня 2011

Что-то вроде этого должно сделать это. Вы в основном добавляете блоки по 30 минут ко времени и зацикливаетесь, пока не получите правильное количество опций.

//get the timestamp for 6.30 am
$time   = strtotime('6.30 am'); //not important what the date is.

//start adding 30mins
$times      = array();
$halfHour   = 60 * 30;
$blocks     = 12; //adjust this to get the number of options
while ($blocks) {
    $times[]  = date('h:i', $time) . ' - ' . date('h:i a', ($time += $halfHour)); //I keep incrementing the time by half an hour
    $blocks--;
}
var_dump($times);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...