以半小时为增量创建选择列表

RuC*_*uCh 13 php time select

我有两个变量:$start_time$end_time.这些值是24小时XX:XX格式的时间,并始终以:00或中的任何一个结束:30.它们应该定义一个范围,用于确定HTML表单中下拉选择列表中出现的时间,但表单以X:XX am/pm符号形式显示格式.

例如,如果我有这些值:

$start_time = "11:00";
$end_time   = "13:30";
Run Code Online (Sandbox Code Playgroud)

我用什么PHP代码生成一个看起来像这样的选择列表?

<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">1:00 pm</option>
<option value="13:30">1:30 pm</option>
Run Code Online (Sandbox Code Playgroud)

我知道如何通过手动构建所有可能值的数组然后向后工作来实现这一目标,但必须有一种更优雅的方式使用PHP的内置时间函数.

任何指导都将非常感谢.

tim*_*dev 43

用一点strtotime()date()魔法相当简单:

考虑:

<?php
$start = "11:00";
$end = "13:30";

$tStart = strtotime($start);
$tEnd = strtotime($end);
$tNow = $tStart;

while($tNow <= $tEnd){
  echo date("H:i",$tNow)."\n";
  $tNow = strtotime('+30 minutes',$tNow);
}
Run Code Online (Sandbox Code Playgroud)

获取格式正确并在标签中输出的内容留作练习,请参阅date()的文档.

  • 你可以把`while`写成`for`.如果你想打高尔夫球:http://codepad.org/LcKmWheb (5认同)

Bin*_*ing 7

这似乎也能让你产生你想要的东西..

$start=strtotime('10:00');
$end=strtotime('21:30');
for ($halfhour=$start;$halfhour<=$end;$halfhour=$halfhour+30*60) {
    printf('<option value="%s">%s</option>',date('H:i',$halfhour),date('g:i a',$halfhour));
}
Run Code Online (Sandbox Code Playgroud)