首页 > 解决方案 > for循环中的时间比较

问题描述

我面临一个奇怪的问题。下面是在 Javascript 中创建不同时隙的代码:

function secondsToTime(secs) {
  var hours = Math.floor(secs / (60 * 60));
  var ampm = hours >= 12 ? 'PM' : 'AM';
  hours = hours % 12 || 12;

  var divisor_for_minutes = secs % (60 * 60);
  var minutes = Math.floor(divisor_for_minutes / 60);

  var userfriendlytime = ('0' + hours).slice(-2) + ":" + ('0' + minutes).slice(-2) + " " + ampm;

  return userfriendlytime;
}



$(document).ready(function() {

  var ptc_id = "236051";
  var ptc_date = "04/30/2021";
  var ptc_from_time = "5400";
  var ptc_to_time = "46800";
  var ptc_duration = "07";
  var ptc_duration_in_seconds = parseFloat(ptc_duration) * 60;
  var ptc_passing_time = "03";
  var ptc_passing_time_in_seconds = parseFloat(ptc_passing_time) * 60;

  var timefrom = ptc_from_time;
  var timeto = ptc_to_time;

  var slottimeto = parseFloat(timefrom) + parseFloat(ptc_duration_in_seconds);

  for (time = timefrom; time <= timeto;) {

    var slotfromtime = parseFloat(timefrom);
    var slottotime = parseFloat(timefrom) + parseFloat(ptc_duration_in_seconds);

    var a_id = slotfromtime + "" + slottotime;

    var slottime = secondsToTime(slotfromtime) + " - " + secondsToTime(slottotime)

    console.log(slottime);
    timefrom = parseFloat(slottotime) + parseFloat(ptc_passing_time_in_seconds);
    time = timefrom;

    if (parseFloat(timefrom) + parseFloat(ptc_duration_in_seconds) > timeto) {
      break;
    }

  }

});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>

我以秒为单位存储时间。上面的代码不起作用,但是当我改变时间,比如不时减少时,代码开始工作。这是工作代码:

function secondsToTime(secs) {
  var hours = Math.floor(secs / (60 * 60));
  var ampm = hours >= 12 ? 'PM' : 'AM';
  hours = hours % 12 || 12;

  var divisor_for_minutes = secs % (60 * 60);
  var minutes = Math.floor(divisor_for_minutes / 60);

  var userfriendlytime = ('0' + hours).slice(-2) + ":" + ('0' + minutes).slice(-2) + " " + ampm;

  return userfriendlytime;
}



$(document).ready(function() {

  var ptc_id = "236051";
  var ptc_date = "04/30/2021";
  var ptc_from_time = "10800";
  var ptc_to_time = "46800";
  var ptc_duration = "07";
  var ptc_duration_in_seconds = parseFloat(ptc_duration) * 60;
  var ptc_passing_time = "03";
  var ptc_passing_time_in_seconds = parseFloat(ptc_passing_time) * 60;

  var timefrom = ptc_from_time;
  var timeto = ptc_to_time;

  var slottimeto = parseFloat(timefrom) + parseFloat(ptc_duration_in_seconds);

  for (time = timefrom; time <= timeto;) {

    var slotfromtime = parseFloat(timefrom);
    var slottotime = parseFloat(timefrom) + parseFloat(ptc_duration_in_seconds);

    var a_id = slotfromtime + "" + slottotime;

    var slottime = secondsToTime(slotfromtime) + " - " + secondsToTime(slottotime)

    console.log(slottime);
    timefrom = parseFloat(slottotime) + parseFloat(ptc_passing_time_in_seconds);
    time = timefrom;

    if (parseFloat(timefrom) + parseFloat(ptc_duration_in_seconds) > timeto) {
      break;
    }

  }

});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>

如果你注意到,我刚刚改变了ptc_from_time

标签: javascriptfor-loop

解决方案


您的程序将无法正常工作,因为您使用字母数字值来执行应该是数字的比较:

time <= timeto

确保这些变量始终包含数值。此外,无需使用将立即转换为数字的字母数字值。使您的设计尽可能简单:使用数字常量和值。


推荐阅读