how to compare two string dates in javascript?

前端 未结 6 1893
暗喜
暗喜 2020-12-03 04:06

I have two string dates in the format of m/d/yyyy. For example, “11/1/2012”, “1/2/2013”. I am writing a function in JavaScript to compare two string dates. The signature of

相关标签:
6条回答
  • 2020-12-03 04:36

    Directly parsing a date string that is not in yyyy-mm-dd format, like in the accepted answer does not work. The answer by vitran does work but has some JQuery mixed in so I reworked it a bit.

    // Takes two strings as input, format is dd/mm/yyyy
    // returns true if d1 is smaller than or equal to d2
    
    function compareDates(d1, d2){
    var parts =d1.split('/');
    var d1 = Number(parts[2] + parts[1] + parts[0]);
    parts = d2.split('/');
    var d2 = Number(parts[2] + parts[1] + parts[0]);
    return d1 <= d2;
    }
    

    P.S. would have commented directly to vitran's post but I don't have the rep to do that.

    0 讨论(0)
  • 2020-12-03 04:38
    var d1 = Date.parse("2012-11-01");
    var d2 = Date.parse("2012-11-04");
    if (d1 < d2) {
        alert ("Error!");
    }
    

    Demo Jsfiddle

    0 讨论(0)
  • 2020-12-03 04:43

    You can simply compare 2 strings

    function isLater(dateString1, dateString2) {
      return dateString1 > dateString2
    }
    

    Then

    isLater("2012-12-01", "2012-11-01")
    

    returns true while

    isLater("2012-12-01", "2013-11-01")
    

    returns false

    0 讨论(0)
  • 2020-12-03 04:43

    You can use "Date.parse()" to properly compare the dates, but since in most of the comments people are trying to split the string and then trying to add up the digits and compare with obviously wrong logic -not completely.

    Here's the trick. If you are breaking the string then compare the parts in nested format.

    Compare year with year, month with month and day with day.

    <pre><code>
    
    var parts1 = "26/07/2020".split('/');
    var parts2 = "26/07/2020".split('/');
    
    var latest = false;
    
    if (parseInt(parts1[2]) > parseInt(parts2[2])) {
        latest = true;
    } else if (parseInt(parts1[2]) == parseInt(parts2[2])) {
        if (parseInt(parts1[1]) > parseInt(parts2[1])) {
            latest = true;
        } else if (parseInt(parts1[1]) == parseInt(parts2[1])) {
            if (parseInt(parts1[0]) >= parseInt(parts2[0])) {
                latest = true;
            } 
        }
    }
    
    return latest;
    
    </code></pre>
    
    0 讨论(0)
  • 2020-12-03 04:45

    Parse the dates and compare them as you would numbers:

    function isLater(str1, str2)
    {
        return new Date(str1) > new Date(str2);
    }
    

    If you need to support other date format consider a library such as date.js.

    0 讨论(0)
  • 2020-12-03 04:54

    If your date is not in format standar yyyy-mm-dd (2017-02-06) for example 20/06/2016. You can use this code

    var parts ='01/07/2016'.val().split('/');
    var d1 = Number(parts[2] + parts[1] + parts[0]);
    parts ='20/06/2016'.val().split('/');
    var d2 = Number(parts[2] + parts[1] + parts[0]);
    return d1 > d2
    
    0 讨论(0)
提交回复
热议问题