转换毫秒的Javascript函数会产生奇怪的结果

时间:2014-09-23 16:28:34

标签: javascript

我正在为我正在制作的小型网络应用创建自己的自定义TimeObject课程。

这里我定义了一个函数来获取有效范围,整数毫秒,以便实例化TimeObject,如下所示:

TimeObject.prototype.millisecondsToTime = function(mm) {
   function valid() {
        if(parseInt(mm,10) >= 0 && parseInt(mm,10) <= 359999999) return true;
    }
    if(valid()) {
        var h = Math.floor(mm/3600000);
        var m = Math.floor(((mm/3600000)-h)*60);
        var s = Math.floor(((((mm/3600000)-h)*60)-m)*60);
        var mmFinal = Math.floor(((((((mm/3600000)-h)*60)-m)*60)-s)*1000);
        this.hours = h,
        this.minutes = m;
        this.seconds = s;
        this.milliseconds = mmFinal;
    } else {
        this.hours = 0,
        this.minutes = 0;
        this.seconds = 0;
        this.milliseconds = 0;
    }
}

除了2 ^ x:

的值外,它似乎工作正常
// 2^0 = 1 -> returns 0, should return 1
// 2^1 = 2 -> returns 1, should return 2
// 2^2 = 4 -> returns 3, should return 4
// 2^3 = 8 -> returns 7, should return 8
// And so on...

10011003,而非10021004等值分别以milliseconds0的形式返回2 。他们应该将13作为milliseconds值返回,但不会。

我知道这是一个逻辑错误,但是这里发生了什么以及如何更正我的代码?

1 个答案:

答案 0 :(得分:1)

首先尝试从计时器中减去较小的元素,逐步删除最小单位,然后除以该单位中的值数。

this.milliseconds = mm % 1000;
mm = (mm - this.milliseconds) / 1000;  // mm is now measured in whole seconds

this.seconds = mm % 60;
mm = (mm - this.seconds) / 60;  // mm is now measured in whole minutes

this.minutes = mm % 60; 
mm = (mm - this.minutes) / 60;  // mm is now measured in whole hours

this.hours = mm;

等。这样可以避免在计算中出现任何非整数数字。