使用时间编号格式

时间:2017-03-23 04:33:02

标签: javascript algorithm

我正在尝试计算时间差,并将时间显示为数字。例如:

8:00AM => 800
11:15AM => 1115
4:30PM => 1630

现在,计算8.30AM10AM之间的时差应该给1.5,但我不确定它是如何做得最好的。

我正在使用JavaScript来计算(1000-830)/100,但它会返回1.7

3 个答案:

答案 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)

您似乎在说您的输入格式已经类似于8001115等。如果是这样,那么我将其转换为小时数小时,以便{{1}变成1115,然后只减去两次:

&#13;
&#13;
11.25
&#13;
&#13;
&#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

我认为这应该有效并有助于您的理解。