Compare two time (hh:mm:ss) strings

前端 未结 5 1918
半阙折子戏
半阙折子戏 2020-12-11 11:46

I have two time strings in hh:mm:ss format. (eg: 12:40:13 and 20:01:01.) How can I compare these in JavaScript?

相关标签:
5条回答
  • 2020-12-11 12:15

    DEMO HERE

    I prefer to have date objects, but as pointed out elsewhere, you can just convert to seconds if you want to do simple compares

    function dateCompare(time1,time2) {
      var t1 = new Date();
      var parts = time1.split(":");
      t1.setHours(parts[0],parts[1],parts[2],0);
      var t2 = new Date();
      parts = time2.split(":");
      t2.setHours(parts[0],parts[1],parts[2],0);
    
      // returns 1 if greater, -1 if less and 0 if the same
      if (t1.getTime()>t2.getTime()) return 1;
      if (t1.getTime()<t2.getTime()) return -1;
      return 0;
    }
    
    alert(dateCompare("12:40:13","20:01:01"));
    

    For seconds:

    function dateDiff(time1,time2) {
      var t1 = new Date();
      var parts = time1.split(":");
      t1.setHours(parts[0],parts[1],parts[2],0);
      var t2 = new Date();
      parts = time2.split(":");
      t2.setHours(parts[0],parts[1],parts[2],0);
    
      return parseInt(Math.abs(t1.getTime()-t2.getTime())/1000);
    }
    

    Assuming you have 24 hour times and same padding you can do simple string compare

     var t1 = "12:40:13", t2= "20:01:01";
     if (t1<t2) {
        console.log(t1," is < ", t2);
     }
    
    0 讨论(0)
  • 2020-12-11 12:20

    Here's another take:

    function compareTimes(timeOne, timeTwo) {           
        if(daterize(timeOne) > daterize(timeTwo)) return 1;
        if(daterize(timeOne) < daterize(timeTwo)) return -1;
        return 0;
    }
    
    function daterize(time) {
        return Date.parse("Thu, 01 Jan 1970 " + time + " GMT");
    }
    

    You may also want to take a look at the MDN Javascript docs for Dates. Javascript comes with a lot of gotchas, like Date.month going from 0-11.

    0 讨论(0)
  • 2020-12-11 12:29

    Here is one suggestion that I modified from the solution in this website here, hope it helps.

    function compareTime(time_1, time_2) {
       var s1 = 
           time1.split(":")[0] * 3600 + time1.split(":")[1] * 60 + time1.split(":")[2];
       var s2 = 
           time2.split(":")[0] * 3600 + time2.split(":")[1] * 60 + time1.split(":")[2];
       return Math.abs(s1 - s2); // Gets difference in seconds
    }
    
    var time_1 = "12:40:13", time_2 = "20:01:01";
    document.write(compareTime(time_1, time_2));
    
    0 讨论(0)
  • 2020-12-11 12:29
     Date.parse('01/01/2011 10:20:45') > Date.parse('01/01/2011 5:10:10')
    
     The 1st January is an arbitrary date, doesn't mean anything.
    
    0 讨论(0)
  • 2020-12-11 12:33

    If "compare" means "see if they are equal", and the two have the same format, why not simply:

    var time1 = "12:40:13";
    var time2 = "20:01:01";
    
    if (time1 == time2) {
        // do stuff
    }
    

    If you need to get the difference in time, the conversion to a date object is one way (see mplungjan's answer) or you can convert them to a common unit (say seconds) and subtract:

    function toSeconds(t) {
        var bits = t.split(':');
        return bits[0]*3600 + bits[1]*60 + bits[2]*1;
    }
    
    var secs1 = toSeconds(time1);
    var secs2 = toSeconds(time2);
    
    // do stuff  - compare, subtract, less than, greater than, whatever
    
    0 讨论(0)
提交回复
热议问题