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

GLP*_*GLP 43 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函数?

Gar*_*rry 80

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

演示Jsfiddle

  • 给定日期格式,不需要 *Date.parse*,它们可以作为字符串进行比较,即 `"2012-11-01" &lt; "2012-11-04"`。 (5认同)
  • 如果日期格式为 12/31/1992 是否有效?哪里月/日/年? (2认同)
  • 我撤回了我的评论,我声称这对`=='不起作用,因为当我瞥见代码时,我认为它是比较Date对象.但是,`Date.parse`返回一个整数(现在有多方便),这个代码也适用于相等.不过,要注意"新日期('2015-10-10')==新日期('2015-10-10')`是假的! (2认同)
  • 它不适用于 DD/MM/yyyy 格式,为什么有人可以告诉我? (2认同)

Mat*_*ert 9

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

function isLater(str1, str2)
{
    return new Date(str1) > new Date(str2);
}
Run Code Online (Sandbox Code Playgroud)

如果您需要支持其他日期格式,请考虑使用诸如date.js之类的库.

  • 这不适用于格式DD/MM/yyyy为什么有人可以告诉我? (2认同)

fuy*_*uyi 8

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

function isLater(dateString1, dateString2) {
  return dateString1 > dateString2
}
Run Code Online (Sandbox Code Playgroud)

然后

isLater("2012-12-01", "2012-11-01")
Run Code Online (Sandbox Code Playgroud)

在返回true时

isLater("2012-12-01", "2013-11-01")
Run Code Online (Sandbox Code Playgroud)

返回假

  • @CaseyC与语法无关。这是因为缺少“ 7”之前的前导零。如果您完全通过`2017/10 / 26`和`2017/10 / 7`,则会得到`false`。重要的是,格式对于此解决方案必须非常具体。 (5认同)
  • `"2017/10/26" &gt; "2017/10/7"` 给出 `false` :D (4认同)
  • 尽管这里的注释有些混乱,但这确实适用于所有 YYYY-MM-DD 日期。最初的问题是询问“m/d/yyyy”日期,但我们大多数人在内部使用 YYYY-MM-DD,因此这是大多数情况下的最佳解决方案。 (4认同)
  • 如果两个日期相等会发生什么:“2012-12-01”、“2012-12-01”? (2认同)