73

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

4

6 回答 6

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

演示 Jsfiddle

最近从评论中发现,您可以直接比较如下字符串

if ("2012-11-01" < "2012-11-04") {
    alert ("Error!");
}
于 2013-02-08T20:57:33.857 回答
17

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

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

然后

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

返回真,而

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

返回假

于 2017-03-13T10:03:38.533 回答
13

解析日期并像数字一样比较它们:

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

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

于 2013-02-08T20:54:42.223 回答
2

直接解析不是 yyyy-mm-dd 格式的日期字符串,就像在接受的答案中一样不起作用。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;
}

PS 会直接评论 vitran 的帖子,但我没有代表这样做。

于 2018-08-22T12:57:31.343 回答
-1

如果您的日期不是标准格式 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
于 2017-04-27T15:00:48.393 回答
-1

您可以使用“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>
于 2020-07-23T18:38:09.673 回答