如何在JavaScript中循环时间值?

如何在JavaScript中循环时间值?,javascript,jquery,for-loop,time,Javascript,Jquery,For Loop,Time,我的情况是,用户选择开始、结束时间和会议长度。一旦选择了开始时间和会议长度,我必须从开始时间一直循环到下午5:00,会议长度增加,并在结束时间输出每个时间段。我的代码在javascript中使用DateAPI,问题是for循环只给我第一个值,然后停止。我不确定我的代码中有什么奇怪的地方,所以如果有人能帮助我,请让我知道。这是我的密码: <tr> <th>Start Time:</th> <td> <select name="s

我的情况是,用户选择开始、结束时间和会议长度。一旦选择了开始时间和会议长度,我必须从开始时间一直循环到下午5:00,会议长度增加,并在结束时间输出每个时间段。我的代码在javascript中使用DateAPI,问题是for循环只给我第一个值,然后停止。我不确定我的代码中有什么奇怪的地方,所以如果有人能帮助我,请让我知道。这是我的密码:

<tr>
  <th>Start Time:</th>
  <td>
    <select name="stime" id="stime" />
                <option value="">--Select start time--</option>
        </select>
  </td>
  <br />

  <th>Meeting Length:</th>
  <td>
    <select name="meet_leng" id="meet_leng">
            <option value="">--Select length--</option>
        </select>
  </td>
  <br />

  <th>End Time:</th>
  <td>
    <select name="etime" id="etime"/>
            <option value="">--Select end time--</option>
        </select>
  </td>
</tr>

开始时间:
--选择开始时间--

会议时长: --选择长度--
结束时间: --选择结束时间--
Javascript:

$(function() {
    //This loop create values fro meeting length
    for(var i=5; i <= 60; i+=5){
        $('#meet_leng').append('<option value="'+i+'">'+i+' min'+'</option>')
    }


    for(var i=700; i<= 1700; i+=15){
    var mins = i % 100;
    var hours = parseInt(i/100);

    if (mins > 45) {
        mins = 0;
      hours += 1;
      i = hours * 100;
    }

    var AmPm = " AM";
    //var standardTime = hours > 11 ? ' PM' : ' AM';
    //format hours
    if(hours == 12){
        AmPm = " PM";
    }

        if (hours > 12) {
        hours = hours - 12;
        AmPm = " PM";
        }

    $('#stime').append('<option value="'+('0' + (hours)).slice(-2)+':'+('0' + mins).slice(-2)+AmPm+'">'+('0' + (hours)).slice(-2)+':'+('0' + mins).slice(-2)+AmPm+' </option>')
  }
});

$('#meet_leng').on('change', function() {
    var time1 = new Date();
  var time2 = new Date();
  var add = new Date();

  //meeting length
  var meetingLength = parseInt($('#meet_leng').val());

    //start time 
  var startTime = $('#stime').val();
    var startHour = startTime.split(':')[0];
  var startMin = startTime.split(':')[1].replace(/AM|PM/gi,'');

  //end time
  var endTime = '05:00 PM';
  var endHour = endTime.split(':')[0];
  var endMin = endTime.split(':')[1].replace(/AM|PM/gi,'');

  //Check if start time is PM and adjust hours to military
    if(startTime.indexOf('PM') > -1){
    startHour = parseInt(startHour) + 12;
    console.log(startHour);
    alert(startHour)
  }

  //Check if end time is PM and adjust hours to military
  if(endTime.indexOf('PM') > -1){
    endHour = parseInt(endHour) + 12;
    console.log(endHour);
  }

  //Date API start time
  time1.setHours(parseInt(startHour));
    time1.setMinutes(parseInt(startMin));

  //Date API end time
  time2.setHours(parseInt(endHour));
    time2.setMinutes(parseInt(endMin));

  //Adding meeting length to start time, this value will be use for end    time
  time1.setMinutes(time1.getMinutes() + meetingLength);

  for(var i=time1; i <= time2; i+=meetingLength){
    $('#etime').append('<option value="'+i+'">'+i+'</option>')
  }

});
$(函数(){
//此循环创建会议长度的值
对于(VarI=5;I11?'PM':'AM';
//格式小时数
如果(小时==12){
AmPm=“PM”;
}
如果(小时数>12){
小时=小时-12;
AmPm=“PM”;
}
$('#stime').append(''+('0'+(小时)).slice(-2)+:''+('0'+mins.slice(-2)+AmPm+'')
}
});
$('meet_leng')。关于('change',function(){
var time1=新日期();
var time2=新日期();
var add=新日期();
//会议时长
var meetingLength=parseInt($('#meet_leng').val();
//开始时间
var startTime=$('#stime').val();
var startHour=startTime.split(“:”)[0];
var startMin=startTime.split(“:”)[1]。替换(/AM | PM/gi,”);
//结束时间
var endTime='05:00 PM';
var endHour=endTime.split(“:”)[0];
var endMin=endTime.split(“:”)[1]。替换(/AM | PM/gi,”);
//检查开始时间是否为PM,并将小时数调整为军用
if(startTime.indexOf('PM')>-1){
startHour=parseInt(startHour)+12;
控制台日志(startHour);
警报(星空)
}
//检查结束时间是否为PM,并将小时数调整为军用
if(endTime.indexOf('PM')>-1){
endHour=parseInt(endHour)+12;
console.log(endHour);
}
//日期API开始时间
时间1.设定小时数(parseInt(startHour));
time1.setMinutes(parseInt(startMin));
//日期API结束时间
时间2.设定小时数(parseInt(endHour));
time2.setMinutes(parseInt(endMin));
//将会议长度添加到开始时间,此值将用于结束时间
time1.setMinutes(time1.getMinutes()+会议长度);

for(var i=time1;i如果你用这个替换for循环,你将得到17:00之前结束的所有时间

do {
        time1.setMinutes(time1.getMinutes() + meetingLength);
        $('#etime').append('<option value="' + time1 + '">' + time1 + '</option>');
      } while (time1 < time2)
do{
time1.setMinutes(time1.getMinutes()+会议长度);
$(“#etime”).append(“”+time1+“”);
}while(time1

time1.setMinutes(time1.getMinutes()+meetingLength);
while(time1
这两个选项都有效,但第二个选项也会过滤掉任何会立即超过17:00的会议


for循环中的+=只是将会议长度添加到字符串表示的末尾。

如果将for循环替换为该值,则所有时间都将在17:00之前结束

do {
        time1.setMinutes(time1.getMinutes() + meetingLength);
        $('#etime').append('<option value="' + time1 + '">' + time1 + '</option>');
      } while (time1 < time2)
do{
time1.setMinutes(time1.getMinutes()+会议长度);
$(“#etime”).append(“”+time1+“”);
}while(time1

time1.setMinutes(time1.getMinutes()+meetingLength);
while(time1
这两个选项都有效,但第二个选项也会过滤掉任何会立即超过17:00的会议



for循环中的+=只是将会议长度添加到字符串表示的末尾。

不确定您的意思,前两个下拉列表有不同的值,第三个下拉列表没有值,但在您选择开始时间时有值?会议长度循环似乎在使用Google Chrome的JSFIDLE中工作。如果我选择7:00am s开始时间,会议长度15分钟例如,我应该在我的结束下拉列表中得到如下值:7:15am,7:30am,7:45am,…5:00pm。但是我当前的代码只给出7:15am。我还更新了我的JSFIDLE。为什么要在循环中更改循环变量的值(I=hours*100)?将我的小时数转换为军事时间。不确定你的意思,前两个下拉列表有不同的值,第三个下拉列表没有值,但在选择开始时间时确实有值?会议长度循环似乎在使用Google Chrome的JSFIDLE中起作用。如果我选择上午7:00开始时间,例如会议长度15分钟,我应该得到值在我的结束下拉列表中,如7:15am,7:30am,7:45am,…5:00pm。但是我当前的代码只给出了7:15am。我还更新了我的JSFIDLE。为什么要在循环中更改循环变量的值(I=hours*100)?将我的工作时间改为军事时间。Martin这很有效!非常感谢。请您再解释一次为什么for循环在这种情况下不起作用,以及为什么我必须使用DO或WHILE?这真的有效吗?尝试将开始时间设置为下午3:45,会议时间设置为55分钟向附加的每个选项添加一个类,然后您可以调用
$('.').remove();
作为更改处理程序$('.'#etime')中的第一个操作。查找('option:gt(0)').remove();在更改开始时,需要将该选项更新为
'+time.getHours()+':'++time1.getMinutes()+''
Martin这很有效!非常感谢。请您再解释一次为什么for循环在这种情况下不起作用,以及为什么我必须使用DO或WHILE?这真的有效吗?尝试将开始时间设置为下午3:45,会议长度为55分钟向附加的每个选项添加一个类,然后您可以调用
$('.')。remove()
作为更改处理程序$('#etime').find('option:gt(0)').remove();在更改开始时,需要将选项更新为
'+time.getHours()+':'+time1.getMinutes()+'