这个时间计算脚本中的奇怪错误?

Ezu*_*o C 4 javascript math time datetime modulus

基本上这个脚本将从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; }
Run Code Online (Sandbox Code Playgroud)

Uni*_*ron 9

每当你遇到数字8的数学问题时,就会转换成八进制系统:)

以...开头的数字0 被解释为八进制数字.

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

但是08并且09在系统中不存在,所以他们回归0.

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

parseInt("09", 10);  // base 10
Run Code Online (Sandbox Code Playgroud)

  • 当数字以零开头时,ECMAScript标准允许parseInt()的实现将其解释为八进制数或十进制数,因此这可以在一个浏览器上工作,也可以在另一个浏览器上工作.要解决所有问题,请使用"parseInt(startTime [0],10)"来强制基数10. (5认同)