我正在尝试创建两个填充相同时间的选择列表。它基本上是为用户选择开始时间和结束时间。我把这些计算为我的时间:
$startTime = 0; //00:00
$endTime = 86100; //23:55'
$now = $startTime;
然后我像这样递增:
$now += 300;
其中300 = 5分钟,因此我在每个循环期间将时间增加5分钟。
因此,我的选择列表应如下所示:
00:00
00:05
00:10
...
...
23:45
23:50
23:55
除了实际印刷时间外,整个过程都有效。我得到了这个:
1:00
1:05
...
...
00:45
00:50
00:55
我怀疑问题是我们现在在英国的夏令时。因此,我该如何解决这个问题?
这是我的实际方法:
public function timeSelectList()
{
$startTime = 0; //00:00
$endTime = 86100; //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">';
while($now <= $endTime)
{
if($now == 61200)//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 == 64800)//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;
}
答案 0 :(得分:1)
您可以将默认时区设置为UTC(不使用DST):
date_default_timezone_set("UTC");
答案 1 :(得分:1)
为什么不写一个将秒转换为小时/分钟的函数?
function secToTime($seconds = 0) {
$hours = floor($seconds/3600);
$minutes = floor($seconds/60)%60;
return sprintf('%02d:%02d', $hours, $minutes);
}
答案 2 :(得分:1)
通过将$now
设置为0,然后在date('H:i', $now)
中使用它,您要求PHP告诉您Unix time启动时当前时区的小时和分钟。这就是为什么@ TheOx的解决方案应该起作用的原因。
我建议使用像@Crashspeeder建议的那样,或者,如果你真的需要特定日期的时间,那么:
$now = strtotime('midnight today'); //or whatever date you need
$endTime = strtotime('midnight tomorrow');
while($now < $endtime){
//your code here
$now += 300;
}
另一个建议是使用像this one这样的javascript timepicker(使用jQuery),只是担心在PHP中处理结果。
答案 3 :(得分:1)
function timeSelectList()
{
$startTime = 0;
$endTime = 86400;
$now = $startTime;
while($now < $endTime)
{
$h = floor($now / 3600);
$m = ($now - ($h * 3600)) / 60;
$x .= '<option value="'.$now.'">'.sprintf('%02d:%02d', $h, $m).'</option>';
$now += 300;
}
return
'<label for="startSelect">Start Time</label><select name="startSelect" id="startSelect">'.$x.'</select>
<label for="endSelect">End Time</label><select name="endSelect" id="endSelect">'.$x.'</select>';
}