php 如何创建时间下拉列表?

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/7941202/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-08-26 03:40:10  来源:igfitidea点击:

How to create a dropdown of time?

php

提问by techie_28

I want to create a dropdown for time in PHP. It should be of 24 hour format with an interval of 30 minutes like 00:00then 00:30then 13:00and so on.I want it round the clock.

我想在 PHP 中创建一个时间下拉列表。它应为24小时格式的,以30分钟的间隔喜欢00:00,然后00:3013:00等。笔者希望它夜以继日。

I have used this code

我用过这个代码

<?php 
    $start = strtotime('12:00 AM');
    $end   = strtotime('11:59 PM');
?>
<select style="width:85px;" name="select1" id="select1">
    <?php for($i = $start;$i<=$end;$i+=1800){ ?>  
        <option value='<?php echo date('G:i', $i); ?>'><?php echo date('G:i', $i); ?></option>;
    <?php } ?>
</select>

The problem is that it doesn't cover the last span of 11:30 to 12:00 AM as the increment value exceeds the end, Is there a direct way to do this in PHP?

问题是它没有覆盖上午 11:30 到 12:00 的最后一个跨度,因为增量值超过了结尾,在 PHP 中有没有直接的方法可以做到这一点?

回答by Christian

Uhm, it is extremely unlikely that in the future, our clocks suddenly gain a 25th hour, so a normal loop should do fine:

嗯,在未来,我们的时钟突然进入第 25 个小时是极不可能的,所以正常循环应该没问题:

for($hours=0; $hours<24; $hours++) // the interval for hours is '1'
    for($mins=0; $mins<60; $mins+=30) // the interval for mins is '30'
        echo '<option>'.str_pad($hours,2,'0',STR_PAD_LEFT).':'
                       .str_pad($mins,2,'0',STR_PAD_LEFT).'</option>';

回答by beytarovski

You could use that function to create time listanywhere on your page:

您可以使用该功能在页面上的任何位置创建时间列表

/**
 *
 * Get times as option-list.
 *
 * @return string List of times
 */
function get_times( $default = '19:00', $interval = '+30 minutes' ) {

    $output = '';

    $current = strtotime( '00:00' );
    $end = strtotime( '23:59' );

    while( $current <= $end ) {
        $time = date( 'H:i', $current );
        $sel = ( $time == $default ) ? ' selected' : '';

        $output .= "<option value=\"{$time}\"{$sel}>" . date( 'h.i A', $current ) .'</option>';
        $current = strtotime( $interval, $current );
    }

    return $output;
}

Get times:

获取次数:

<select name="time"><?php echo get_times(); ?></select>

Here is the result:

结果如下:

<select name="time">
    <option value="00:00">12.00 AM</option>
    <option value="00:30">12.30 AM</option>
    <option value="01:00">01.00 AM</option>
    <option value="01:30">01.30 AM</option>
    <option value="02:00">02.00 AM</option>
    <option value="02:30">02.30 AM</option>
    <option value="03:00">03.00 AM</option>
    <option value="03:30">03.30 AM</option>
    <option value="04:00">04.00 AM</option>
    <option value="04:30">04.30 AM</option>
    <option value="05:00">05.00 AM</option>
    <option value="05:30">05.30 AM</option>
    <option value="06:00">06.00 AM</option>
    <option value="06:30">06.30 AM</option>
    <option value="07:00">07.00 AM</option>
    <option value="07:30">07.30 AM</option>
    <option value="08:00">08.00 AM</option>
    <option value="08:30">08.30 AM</option>
    <option value="09:00">09.00 AM</option>
    <option value="09:30">09.30 AM</option>
    <option value="10:00">10.00 AM</option>
    <option value="10:30">10.30 AM</option>
    <option value="11:00">11.00 AM</option>
    <option value="11:30">11.30 AM</option>
    <option value="12:00">12.00 PM</option>
    <option value="12:30">12.30 PM</option>
    <option value="13:00">01.00 PM</option>
    <option value="13:30">01.30 PM</option>
    <option value="14:00">02.00 PM</option>
    <option value="14:30">02.30 PM</option>
    <option value="15:00">03.00 PM</option>
    <option value="15:30">03.30 PM</option>
    <option value="16:00">04.00 PM</option>
    <option value="16:30">04.30 PM</option>
    <option value="17:00">05.00 PM</option>
    <option value="17:30">05.30 PM</option>
    <option value="18:00">06.00 PM</option>
    <option value="18:30">06.30 PM</option>
    <option value="19:00" selected="">07.00 PM</option>
    <option value="19:30">07.30 PM</option>
    <option value="20:00">08.00 PM</option>
    <option value="20:30">08.30 PM</option>
    <option value="21:00">09.00 PM</option>
    <option value="21:30">09.30 PM</option>
    <option value="22:00">10.00 PM</option>
    <option value="22:30">10.30 PM</option>
    <option value="23:00">11.00 PM</option>
    <option value="23:30">11.30 PM</option>
</select>

回答by dqhendricks

Why not use the DateTime object which is specifically designed for this type of thing?

为什么不使用专为此类事物设计的 DateTime 对象?

$starttime = '00:00:00';
$time = new DateTime($starttime);
$interval = new DateInterval('PT30M');
$temptime = $time->format('H:i:s');

do {
   echo $temptime . '<br />';
   $time->add($interval);
   $temptime = $time->format('H:i:s');
} while ($temptime !== $starttime);

回答by Samir Patel

$hoursArray = range(0, 12);
$minutesArray = range(0, 60);
$amPmArray = array('AM', 'PM');

//Pad the min and hr fields with a leading zero
array_walk($hoursArray, 'padLeadingZero');
array_walk($minutesArray, 'padLeadingZero');

/**
* Pad give input with a leading 0
* @param int $val Value that needs to be padded with a leading 0
*/
function padLeadingZero(&$val){
    $val = str_pad($val, $padLength = 2, $padString = '0', $padType = STR_PAD_LEFT);
}

回答by surinder singh

for joomla 2.* user

对于 joomla 2.* 用户

<field
        name="time"
        type="list"
        required="true"
        label="Time"
        description="Time"
        class="input-medium validate-time"
    >   

        <option value="00:00:00">00:00</option>      
        <option value="00:30:00">00:30</option>      
        <option value="01:00:00">01:00</option>     
        <option value="01:30:00">01:30</option>      
        <option value="02:00:00">02:00</option>      
        <option value="02:30:00">02:30</option>      
        <option value="03:00:00">03:00</option>      
        <option value="03:30:00">03:30</option>      
        <option value="04:00:00">04:00</option>      
        <option value="04:30:00">04:30</option>      
        <option value="05:00:00">05:00</option>      
        <option value="05:30:00">05:30</option>      
        <option value="06:00:00">06:00</option>      
        <option value="06:30:00">06:30</option>     
        <option value="07:00:00">07:00</option>      
        <option value="07:30:00">07:30</option>      
        <option value="08:00:00">08:00</option>      
        <option value="08:30:00">08:30</option>      
        <option value="09:00:00">09:00</option>      
        <option value="09:30:00">09:30</option>      
        <option value="10:00:00">10:00</option>      
        <option value="10:30:00">10:30</option>      
        <option value="11:00:00">11:00</option>      
        <option value="11:30:00">11:30</option>      
        <option value="12:00:00">12:00</option>      
        <option value="12:30:00">12:30</option>      
        <option value="13:00:00">13:00</option>      
        <option value="13:30:00">13:30</option>      
        <option value="14:00:00">14:00</option>      
        <option value="14:30:00">14:30</option>      
        <option value="15:00:00">15:00</option>      
        <option value="15:30:00">15:30</option>      
        <option value="16:00:00">16:00</option>      
        <option value="16:30:00">16:30</option>      
        <option value="17:00:00">17:00</option>      
        <option value="17:30:00">17:30</option>      
        <option value="18:00:00">18:00</option>      
        <option value="18:30:00">18:30</option>      
        <option value="19:00:00">19:00</option>      
        <option value="19:30:00">19:30</option>      
        <option value="20:00:00">20:00</option>      
        <option value="20:30:00">20:30</option>      
        <option value="21:00:00">21:00</option>      
        <option value="21:30:00">21:30</option>      
        <option value="22:00:00">22:00</option>      
        <option value="22:30:00">22:30</option>      
        <option value="23:00:00">23:00</option>      
        <option value="23:30:00">23:30</option>
    </field>

回答by Rizwan Mughal

Convert your time into hours first and then by using for loop you can generate the list of time like you want.

首先将您的时间转换为小时,然后通过使用 for 循环,您可以生成您想要的时间列表。

$s_temp = new DateTime('17:00');
$stime = $s_temp->format('H');

$e_temp = new DateTime('03:30');
$etime = $e_temp->format('H');

$data = array();

if starting time is < 12

如果开始时间 < 12

if($stime < 12){
 for($hours=$stime; $hours<12; $hours++){
  for($mins=0; $mins<60; $mins+=30){
   $data[] = str_pad($hours,2,'0',STR_PAD_LEFT).':'.str_pad($mins,2,'0',STR_PAD_LEFT).' am';
  }
 }
 for($hours=0; $hours<=$etime; $hours++){
  for($mins=0; $mins<60; $mins+=30){
   $data[] = str_pad($hours,2,'0',STR_PAD_LEFT).':'.str_pad($mins,2,'0',STR_PAD_LEFT).' pm';
  }
 }
}

if starting time is > 12

如果开始时间 > 12

if($stime > 12){
 for($hours=$stime; $hours<24; $hours++){
  for($mins=0; $mins<60; $mins+=30){
   $data[] = str_pad($hours,2,'0',STR_PAD_LEFT).':'.str_pad($mins,2,'0',STR_PAD_LEFT).' pm';
  }
 }
 for($hours=0; $hours<=$etime; $hours++){
  for($mins=0; $mins<60; $mins+=30){
   $data[] = str_pad($hours,2,'0',STR_PAD_LEFT).':'.str_pad($mins,2,'0',STR_PAD_LEFT).' am';
  }
 }
}

return $data;