4

基本上,此脚本将从 EndTime 中减去 StartTime,使用 jQuery 插件在 html 表单中填充 HH:MM 格式的开始和结束时间,输入字段填充结果,除了一个问题外,它可以工作:

如果开始时间在 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; }
4

1 回答 1

9

每当您遇到数字 8 的数学问题时,都会将其转换为八进制系统 :)

以 开头的0 数字在 Javascript 中被解释为八进制数

没有问题01..07,因为它们在两个系统中都是相同的。

但是08and09不存在于系统中,所以他们返回0.

另请参阅也提供解决方案的此问题:在执行 parseInt 时指定基本参数:

parseInt("09", 10);  // base 10
于 2010-07-05T19:30:50.657 回答