如何计算Javascript中字符串之间的时差

时间:2013-06-17 21:40:19

标签: javascript jquery

是我有两个小时的字符串格式,我需要计算javascript的差异,例如:

a =“10:22:57”

b =“10:30:00”

差异= 00:07:03?

4 个答案:

答案 0 :(得分:13)

尽管使用Date或库是完全正常的(并且可能更容易),但这里有一个如何使用一点点数学“手动”执行此操作的示例。这个想法如下:

  1. 解析字符串,提取小时,分钟和秒钟。
  2. 计算总秒数。
  3. 减去两个数字。
  4. 将秒数格式设为hh:mm:ss

  5. 示例:

    function toSeconds(time_str) {
        // Extract hours, minutes and seconds
        var parts = time_str.split(':');
        // compute  and return total seconds
        return parts[0] * 3600 + // an hour has 3600 seconds
               parts[1] * 60 +   // a minute has 60 seconds
               +parts[2];        // seconds
    }
    
    var difference = Math.abs(toSeconds(a) - toSeconds(b));
    
    // compute hours, minutes and seconds
    var result = [
        // an hour has 3600 seconds so we have to compute how often 3600 fits
        // into the total number of seconds
        Math.floor(difference / 3600), // HOURS
        // similar for minutes, but we have to "remove" the hours first;
        // this is easy with the modulus operator
        Math.floor((difference % 3600) / 60), // MINUTES
        // the remainder is the number of seconds
        difference % 60 // SECONDS
    ];
    
    // formatting (0 padding and concatenation)
    result = result.map(function(v) {
        return v < 10 ? '0' + v : v;
    }).join(':');
    

    DEMO

答案 1 :(得分:4)

从中制作两个Date个对象。然后你可以比较。

从您想要比较的两个日期中获取值,并进行减法。像这样(假设foobar是日期):

var totalMilliseconds = foo - bar;

这将为您提供两者之间的毫秒数。有些数学会将其转换为天,小时,分钟,秒或您希望使用的任何单位。例如:

var seconds = totalMilliseconds / 1000;
var hours = totalMilliseconds / (1000 * 3600);

至于从Date获取string,你必须查看构造函数(检查第一个链接),并以最适合你的方式使用它。快乐的编码!

答案 2 :(得分:2)

如果你总是少于12小时,这是一个非常简单的方法:

a = "10:22:57";
b = "10:30:00";
p = "1/1/1970 ";

difference = new Date(new Date(p+b) - new Date(p+a)).toUTCString().split(" ")[4];
alert( difference ); // shows: 00:07:03

如果您需要格式化超过12小时,渲染会更复杂,日期之间的MS#是正确的使用此数学...

答案 3 :(得分:0)