我有一个从晚上9点到8点的时间间隔为15分钟的选择框,它是使用以下代码生成的。
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等选项的选择框,如下所示
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点之前的所有选项。
为此,我尝试了这个
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>";
但它不起作用。
发布于 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
-->
<?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
<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>
发布于 2018-06-08 03:36:17
最好和最具可读性的解决方案是使用DateTime类。我建议先创建当前的DateTime。在foreach循环中,您必须创建DateTime foreach时间,并与当前时间进行比较。可能的解决方案:
<?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>";
https://stackoverflow.com/questions/50748694
复制相似问题