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

如何在javascript中比较两个字符串日期?,javascript,date,Javascript,Date,我有两个字符串日期,格式为m/d/yyyy。例如,“2012年11月1日”、“2013年1月2日”。我正在用JavaScript编写一个函数来比较两个字符串日期。我的函数的签名是 <pre><code> var parts1 = "26/07/2020".split('/'); var parts2 = "26/07/2020".split('/'); var latest = false; if (parseInt(part

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

解析日期并将其与数字进行比较:

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

如果您需要支持其他日期格式,请考虑一个库,例如./p> <代码> var d1= Deal.PalSE(“2012-11-01”); var d2=日期解析(“2012-11-04”); 如果(d1


您只需比较两个字符串即可

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

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

如果您的日期不是标准的yyyy mm dd(2017-02-06)格式,例如2016年6月20日,则返回false。您可以使用此代码

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

直接解析不是yyyy-mm-dd格式的日期字符串(如中的)不起作用。答案by确实有效,但是混合了一些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;
}
//输入两个字符串,格式为dd/mm/yyyy
//如果d1小于或等于d2,则返回true
功能比较(d1、d2){
var parts=d1.拆分('/');
变量d1=数量(零件[2]+零件[1]+零件[0]);
部分=d2.拆分('/');
var d2=数量(零件[2]+零件[1]+零件[0]);
return d1您可以使用“Date.parse()”来正确比较日期,但由于在大多数注释中,人们试图拆分字符串,然后尝试将数字相加,并使用明显错误的逻辑进行比较,这并不是完全正确的

这里有一个技巧。如果你打破了字符串,然后比较嵌套格式的部分

将年与年、月与月、日与日进行比较



从字符串中创建两个日期对象,并将它们作为数字进行比较。将字符串转换为本机JS datetime对象(请参阅)。从那开始就很容易了。我如何从字符串创建两个日期对象?如果日期的格式是1992年12月31日,它会工作吗?其中MM/dd/YYYY?它也适用于MM/dd/yyyyy格式。@AnttiHaapala它似乎与所有运算符都工作。我收回了我的评论,其中我声称这不适用于
=
,因为当我瞥见一个我以为这段代码是在比较日期对象。但是,
Date.parse
返回一个整数(现在有多方便),这段代码也可以实现相等。不过,请注意
new Date('2015-10-10')==new Date('2015-10-10'))
是错误的!它不适用于DD/MM/yyyy格式。为什么有人能告诉我?如果你能发布你的代码,我们将能够帮助你。确保你没有使用新的关键字Date.parse.Date.parse只是一种方法。我想指出,这只适用于比较运算符,而不适用于相等的
=
!=
。它不是不适用于DD/MM/yyyy格式为什么有人能告诉我???@meenu1即使JavaScript规范中只有少数可解析的数据格式。浏览器也支持其他一些格式,尽管它们不在规范中(例如,大多数解析MM-DD-yyyy)。但是没有任何保证,您需要在自己的代码或使用库中显式解析它。
"2017/10/26"  > "2017/10/7"
给出
false
:D@CaseyC这与语法无关。这与“7”之前缺少前导零有关。如果您正好通过
2017/10/26
2017/10/7
,您将得到
false
。重要的是,格式应该非常具体,此解决方案才能工作。@max是正确的。不是语法,而是格式特定的。我删除了我的评论,因为它具有误导性。这里发生的事情??parseInt('2012-12-01')只是2012年。我不明白幕后发生了什么,也不明白为什么会这样。尽管这里的评论有些混乱,但这对所有的YYYY-MM-DD日期都有效。最初的问题是关于“m/d/YYYY”日期,但我们大多数人都在内部使用YYYY-MM-DD,所以这是大多数情况下的最佳解决方案。谢谢。这甚至适用于自定义日期格式。这很好,我们只需要在个位数的月份和个位数的日期之前补零。这根本不起作用。根据这一点,2019年1月1日比1985年12月31日小,这显然是wr我想这是因为您没有正确设置日期格式。它应该是dd/mm/yyyyy。它是dd/mm/yyyy。您可以自己检查:2019年1月1日(2019年1月1日)和1985年12月31日(1985年12月31日)。如果将每个日期的各个部分连接起来,然后将它们转换为一个数字,则得到1012019和31121985。第二个数字显然比第一个数字大……但事实是第一个日期比第二个日期大30年。即使其各部分的总和也被视为数字,也不会起作用(2021<2028)这不起作用。它对日期的所有部分都具有同等的重要性。您需要类似var d1=Number(部分[2]*10000+部分[1]*100+部分[0]);
// 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;
}
<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>