基本上这个脚本将从EndTime中减去StartTime,使用jQuery插件,html表单以HH:MM格式填充开始和结束时间,输入字段用结果填充,除了一个问题外,它可以工作: / p>
如果“开始时间”介于08:00和09:59之间,它只会返回奇怪的结果 - 结果是精确的10小时,为什么?
所有其他输入正确计算!
function setValue() {
var startTime = document.getElementById('ToilA');
var endTime = document.getElementById('EndHours'); startTime = startTime.value.split(":");
var startHour = parseInt(startTime[0]);
var startMinutes = parseInt(startTime[1]);
endTime = endTime.value.split(":");
var endHour = parseInt(endTime[0]);
var endMinutes = parseInt(endTime[1]);
//var hours, minutes;
var today = new Date();
var time1 = new Date(2000, 01, 01, startHour, startMinutes, 0);
var time2 = new Date(2000, 01, 01, endHour, endMinutes, 0); var milliSecs = (time2 - time1);
msSecs = (1000);
msMins = (msSecs * 60);
msHours = (msMins * 60);
numHours = Math.floor(milliSecs/msHours);
numMins = Math.floor((milliSecs - (numHours * msHours)) / msMins);
numSecs = Math.floor((milliSecs - (numHours * msHours) - (numMins * msMins))/ msSecs); numSecs = "0" + numSecs; numMins = "0" + numMins; DateCalc = (numHours + ":" + numMins);
document.getElementById('CalculateHours').value = DateCalc; }
答案 0 :(得分:9)
每当你遇到数字8的数学问题时,就会转换成八进制系统:)
以0
are interpreted as octal numbers in Javascript开头的数字。
01..07
没有问题,因为它们在两个系统中是相同的。
但系统中不存在08
和09
,因此返回0
。
另请参阅this question,它还提供了解决方案:在执行parseInt时指定基本参数:
parseInt("09", 10); // base 10