javascript - 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
。
解决方案
您的程序将无法正常工作,因为您使用字母数字值来执行应该是数字的比较:
time <= timeto
确保这些变量始终包含数值。此外,无需使用将立即转换为数字的字母数字值。使您的设计尽可能简单:使用数字常量和值。
推荐阅读
- selenium - 尝试从 RedBus.com 选择继续日期
- javascript - 多选复选框的 Javascript 验证
- java - Swagger codegen 服务器端工作流程
- reactjs - 并非所有的触摸事件都在 array.map react 中触发
- python - Django/Python 'int' 对象不可下标
- windows - NASM 64 中 Windows API 中的 CreateFileA:参数不正确,但哪个参数?
- reactjs - 如何以样式在快照中的方式从使用材质 ui 样式创建的组件中进行快照
- android - 使用 setOnClickListener 并获取“潜在 NullPointerException。某些布局版本中缺少资源
- java - JDK术语解释
- java - Java 中的 Apache-POI 不返回计算的单元格值