我正在尝试计算时间差,并将时间显示为数字。例如:
8:00AM => 800
11:15AM => 1115
4:30PM => 1630
现在,计算8.30AM
和10AM
之间的时差应该给1.5
,但我不确定它是如何做得最好的。
我正在使用JavaScript来计算(1000-830)/100
,但它会返回1.7
答案 0 :(得分:2)
这是我之前准备的一些功能
var hhmmToMinutes = function (s) {
var v = parseInt(s.replace(/\D+/g, ''), 10);
if(s.indexOf(':') < 0) {
v = v * 100
}
var isPm = s.toLowerCase().indexOf('pm') > 0;
if (!isPm && ((v / 100) | 0) == 12) {
v -= 1200;
}
return v % 100 + ((v / 100) | 0) * 60 + (isPm ? 720 : 0);
};
var hoursDiff = function(a, b) {
return (hhmmToMinutes(a) - hhmmToMinutes(b)) / 60;
}
console.log(hhmmToMinutes('8:00AM'));
console.log(hhmmToMinutes('11:15AM'));
console.log(hhmmToMinutes('4:30PM'));
console.log(hhmmToMinutes('12:30AM'));
console.log(hoursDiff('10AM', '8:30AM'));
答案 1 :(得分:0)
您似乎在说您的输入格式已经类似于800
,1115
等。如果是这样,那么我将其转换为小时数小时,以便{{1}变成1115
,然后只减去两次:
11.25
&#13;
如果您不想要否定答案,请使用function hoursSinceMidnight(t) {
return Math.floor(t/100) + t % 100 / 60
}
function timeDiff(t1, t2) {
return hoursSinceMidnight(t1) - hoursSinceMidnight(t2)
}
console.log(timeDiff(1000, 830))
console.log(timeDiff(1100, 800))
console.log(timeDiff(1330, 1015))
console.log(timeDiff(1015, 1330))
console.log(timeDiff('1330', '1015')) // works for string inputs too
console.log(timeDiff(1423, 701))
。请注意,上面的最后一个示例产生了很多小数位 - 如果你想将答案舍入到一些最大小数位数,你没有说,但是我会把它留给你......
答案 2 :(得分:0)
我从未使用过这样的转换,但我认为这样做的一个非常简单的方法是
将10.00转换为1000,即将时间乘以100 同样,将另一个数字转换为6.30,这将是630
两者之间的差异是1000-630 = 370 现在将其转换为100除以之前将差值减去40
float convert(int time1, int time2)
{
int diff = Math.abs(time1 - time2);
diff = (diff-40)/100
int multiplier = 100;
double perc;
perc = (int)((diff - (int)diff) * multiplier);
perc = perc/60;
diff = (diff - (diff -(int) diff) + perc;
return diff;
}
我不知道任何预定义的功能,但这应该适用于我。
从差异中减去40的原因是我们不应该考虑值61 - 100,即40分钟从60开始重新开始
Now we have 1000-830 = 170 - 40 = 130/100 = 1.3
to convert 30 to minutes 1.3-1 = 0.3 *= 100 = 30
Now we have 30/60 = 0.5 minutes
diff = 1.3 - (1.3 -1) + .5
diff = 1 + 0.5
diff = 1.5
我认为这应该有效并有助于您的理解。