我正在为自己制作的小型Web应用程序创建自己的自定义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的值分别将milliseconds返回为02。他们应该返回13作为milliseconds值,但不返回。

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

最佳答案

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

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;


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

09-19 09:38