首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >php中的时间间隔下拉数组

php中的时间间隔下拉数组
EN

Stack Overflow用户
提问于 2018-06-08 03:15:53
回答 2查看 165关注 0票数 0

我有一个从晚上9点到8点的时间间隔为15分钟的选择框,它是使用以下代码生成的。

代码语言:javascript
复制
function hoursRange($lower = 9, $upper = 20, $step = .25, $format = NULL) {

    if ($format === NULL) {
        $format = 'g:ia'; // 9:30pm
    }
    $times = array();
    foreach(range($lower, $upper, $step) as $increment) {
        $increment = number_format($increment, 2);
        list($hour, $minutes) = explode('.', $increment);
        $date = new DateTime($hour . ':' . $minutes * .6);
        $times[(string) $increment] = $date->format($format);
    }
    return $times;
}

$timeArr = hoursRange();
$array = array_values($timeArr);
echo "<select>";
echo "<option value=''>--Select--</option>";
foreach($array as $key=>$value){    
$disabled = '';
    echo "<option value=".$key." $disabled>".$value."</option>";
}
echo "</select>";

它提供了一个带有9:00、9:15等选项的选择框,如下所示

代码语言:javascript
复制
Array

    (
        [0] => 9:00am
        [1] => 9:15am
        [2] => 9:30am
        [3] => 9:45am
        [4] => 10:00am
        [5] => 10:15am
        [6] => 10:30am
        [7] => 10:45am
        [8] => 11:00am
        [9] => 11:15am
        [10] => 11:30am
        [11] => 11:45am
        [12] => 12:00pm
        [13] => 12:15pm
        [14] => 12:30pm
        [15] => 12:45pm
        [16] => 1:00pm
        [17] => 1:15pm
        [18] => 1:30pm
        [19] => 1:45pm
        [20] => 2:00pm
        [21] => 2:15pm
        [22] => 2:30pm
        [23] => 2:45pm
        [24] => 3:00pm
        [25] => 3:15pm
        [26] => 3:30pm
        [27] => 3:45pm
        [28] => 4:00pm
        [29] => 4:15pm
        [30] => 4:30pm
        [31] => 4:45pm
        [32] => 5:00pm
        [33] => 5:15pm
        [34] => 5:30pm
        [35] => 5:45pm
        [36] => 6:00pm
        [37] => 6:15pm
        [38] => 6:30pm
        [39] => 6:45pm
        [40] => 7:00pm
        [41] => 7:15pm
        [42] => 7:30pm
        [43] => 7:45pm
        [44] => 8:00pm
    )

注意:现在我的问题是,我必须按条件禁用选择框中的一些选项

当前时间=上午11点=>早于此时间的所有选项都将被禁用

current time =2 2pm =>应禁用早于此时间的所有选项

当前时间=下午3:30或下午3:48,则应禁用下午4点之前的所有选项。

为此,我尝试了这个

代码语言:javascript
复制
date_default_timezone_set('Asia/Kolkata'); 
$curretHour =  date("g");

echo "<select>";

foreach($array as $key=>$value){
    $newArr = explode(':', $value);
    if(($newArr[0] == $currentHour) || $newArr[0] <$currentHour){
        $dis = 'disabled = disabled';
    }else{
        $dis = '';
    }
    echo "<option value=".$key." $dis>".$value."</option>";
}
echo "</select>";

但它不起作用。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-06-08 11:05:50

我发现这解决了我的问题。

--选择--上午11:00上午11:15上午11:30上午11:45上午12:00下午12:15下午12:30下午12:45下午01:30下午01:15下午01:30下午01:45下午02:00下午02:15下午02:30下午02:45下午03:00下午03:15下午03:45下午04:00下午04:15下午04:30下午04:45下午05:00

-->

代码语言:javascript
复制
<?php 
//date_default_timezone_set('Asia/Kolkata'); 
//echo date("g");

function hoursRange($lower = 9, $upper = 20, $step = .25, $format = NULL) {

    if ($format === NULL) {
        $format = 'g:ia'; // 9:30pm
    }
    $times = array();
    foreach(range($lower, $upper, $step) as $increment) {
        $increment = number_format($increment, 2);
        list($hour, $minutes) = explode('.', $increment);
        $date = new DateTime($hour . ':' . $minutes * .6);
        $times[(string) $increment] = $date->format($format);
    }
    return $times;
}

$currentHour = 9;
$array = $timeArr = hoursRange();
//$array = array_values($timeArr);
echo "<select>";
echo "<option value=''>--Select--</option>";
$i = 0;
foreach($array as $key=>$value){
$newArr = explode('.', $key);
    if(($newArr[0] == $currentHour) || $newArr[0] <$currentHour){
        $disabled = 'disabled = disabled';
    }else{
        $disabled = '';
    }   
//$disabled = '';
    echo "<option value=".$i." $disabled>".$value."</option>";
    $i++;
}
echo "</select>";
echo "<pre>";print_r($array);

/js

代码语言:javascript
复制
<select id="test" name="test">
  <option value="1">9:00 am</option>
  <option value="2">10:00 am</option>
  <option value="3">11:00 am</option>
  <option value="4">8:00 pm</option>
</select>

<script>
var selectbox = document.getElementById('test');
//var opt = ['9:00 am', '10:00 am','11:00 am','8:00 pm'];
//var opt = ['00:00'=>'12:00 am','10:00'=>'10:00 am'];

var opt = {}; // no need for an array

opt["900"] = '09:00 am';
opt["1000"] = '10:00 am';
opt["1100"] = '11:00 am';
opt["1200"] = '12:00 pm';
opt["1300"] = '01:00 pm';
opt["1400"] = '02:00 pm';

var curtime = '1400';
var str = curtime.split(':');
//console.log(opt);
selectbox.onchange = function(){
    //alert('here');
 var i=0;
    var list = '';
for (var key in opt) {
    console.log('key');

    if(curtime <= key){
        console.log('if');
        var dis = 'disabled';
        console.log(opt[key]);

    }
    list += '<option '+dis+' value='+i+'>'+opt[key]+'</option>';
    //console.log(key);
    i++;
}
    selectbox.innerHTML = list;
};


</script>
票数 0
EN

Stack Overflow用户

发布于 2018-06-08 03:36:17

最好和最具可读性的解决方案是使用DateTime类。我建议先创建当前的DateTime。在foreach循环中,您必须创建DateTime foreach时间,并与当前时间进行比较。可能的解决方案:

代码语言:javascript
复制
<?php
function hoursRange($lower = 9, $upper = 20, $step = .25, $format = NULL) {

    if ($format === NULL) {
        $format = 'g:ia'; // 9:30pm
    }
    $times = array();
    foreach(range($lower, $upper, $step) as $increment) {
        $increment = number_format($increment, 2);
        list($hour, $minutes) = explode('.', $increment);
        $date = new DateTime($hour . ':' . $minutes * .6);
        $times[(string) $increment] = $date->format($format);
    }
    return $times;
}

$timeArr = hoursRange();
$array = array_values($timeArr);
echo "<select>";
echo "<option value=''>--Select--</option>";
$currentDateTime = new \DateTime();
foreach($array as $key=>$value){
    $dateTime = \DateTime::createFromFormat('g:ia', $value);
    $disabled = $dateTime <= $currentDateTime;
    echo "<option value=".$key." $disabled>".$value."</option>";
}
echo "</select>";
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50748694

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档