如何在javascript中比较两个字符串日期?

时间:2013-02-08 20:52:08

标签: javascript date

我有两个字符串日期,格式为m / d / yyyy。例如,“11/1/2012”,“1/2/2013”​​。我在JavaScript中编写一个函数来比较两个字符串日期。我的功能的签名是 bool isLater(string1, string2),如果string1传递的日期晚于string2传递的日期,则返回true,否则返回false。 因此,isLater(“1/2/2013”​​,“11/1/2012”)应该返回true。我如何为此编写JavaScript函数?

6 个答案:

答案 0 :(得分:66)

var d1 = Date.parse("2012-11-01");
var d2 = Date.parse("2012-11-04");
if (d1 < d2) {
    alert ("Error!");
}

Demo Jsfiddle

答案 1 :(得分:7)

解析日期并按照数字进行比较:

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

如果您需要支持其他日期格式,请考虑使用date.js等库。

答案 2 :(得分:3)

您可以简单地比较2个字符串

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

然后

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

时返回true
isLater("2012-12-01", "2013-11-01")

返回false

答案 3 :(得分:1)

直接解析非yyyy-mm-dd格式的日期字符串(如accepted answer格式)不起作用。 vitran的答案确实有效,但是混入了一些JQuery,所以我做了一些修改。

// 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。本可以直接评论vitran的帖子,但我没有代表这样做。

答案 4 :(得分:0)

如果您的日期格式不符合标准格式yyyy-mm-dd(2017-02-06),例如20/06/2016。您可以使用此代码

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

答案 5 :(得分:0)

您可以使用“ Date.parse()”来正确比较日期,但是由于在大多数注释中,人们试图拆分字符串,然后试图将数字加起来并与明显错误的逻辑进行比较-并不完全

这就是诀窍。如果您要破坏字符串,请比较嵌套格式的部分。

比较年,年,月,月和日。

<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>