我正在为自己制作的小型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...
诸如
1001
,1003
而不是1002
和1004
的值分别将milliseconds
返回为0
和2
。他们应该返回1
和3
作为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;
等等。这样可以避免任何非整数数字出现在您的计算中。