【问题标题】:Strange bug in this time calculation script?这个时间计算脚本中的奇怪错误?
【发布时间】:2010-07-05 19:23:03
【问题描述】:

基本上,此脚本将从 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; }

【问题讨论】:

    标签: javascript datetime math time modulus


    【解决方案1】:

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

    0are interpreted as octal numbers in Javascript开头的数字。

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

    但是0809在系统中不存在,所以返回0

    另见this question,它也提供了一个解决方案:在执行 parseInt 时指定基本参数:

    parseInt("09", 10);  // base 10
    

    【讨论】:

    • 当数字以零开头时,ECMAScript 标准允许 parseInt() 的实现将其解释为八进制数或十进制数,因此这可能适用于一个浏览器,也可能不适用于另一个浏览器。要为所有人修复它,请使用“parseInt(startTime[0],10)”,它强制以 10 为基数。
    • 谢谢大家的回答和解释。
    • 我对这段代码还有一个问题,当分钟部分超过 10 时有一个前导 0,所以它返回类似于 11:013 而不是 11:13 的东西,可以用数学来解决吗或者 if 语句会解决这个问题吗?就像如果项目数> 2,删除第一项?我打算在提交表单时执行一个 PHP 脚本来删除它,但它对用户来说并不好。
    • @user 可能有一种巧妙的巧妙方法可以更优雅地执行此操作,但if 语句也可以完成这项工作。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-02
    • 1970-01-01
    • 2015-08-09
    • 1970-01-01
    • 2014-11-11
    相关资源
    最近更新 更多