确定Javascript中的日期相等


69

我需要找出用户选择的两个日期在Javascript中是否相同。日期以字符串(“ xx / xx / xxxx”)的形式传递给此函数。这就是我需要的所有粒度。

这是我的代码:

        var valid = true;
    var d1 = new Date($('#datein').val());
    var d2 = new Date($('#dateout').val());
    alert(d1+"\n"+d2);
    if(d1 > d2) {
        alert("Your check out date must be after your check in date.");
        valid = false;
    } else if(d1 == d2) {
        alert("You cannot check out on the same day you check in.");
        valid = false;
    }

将日期转换为对象后的javascript警报如下所示:

2011年1月25日星期二00:00:00 GMT-0800(太平洋标准时间)

2011年1月25日星期二00:00:00 GMT-0800(太平洋标准时间)

确定日期1是否大于日期2的测试有效。但是使用==或===运算符不会将有效更改为false。


3
您是否签出过此帖子:stackoverflow.com/questions/338463/…。有帮助吗?
JohnMerlino 2011年

试图将其标记为重复,但我认为这是同一问题的附带情况,所以我不是。
利亚姆

这不是重复项。提到的帖子(和接受的答案)是关于确定日期是在另一个日期之前还是之后,而不是关于相等性。
yannick1976

Answers:


140

使用getTime()方法。它将检查日期的数值,并且它适用于大于/小于检查和等于检查。

编辑:

if (d1.getTime() === d2.getTime())

1
我上面发布的stackoverflow问题显示了一个示例。问题是相同的。
JohnMerlino 2011年

16
一种更简单的方法:if( +d1 == +d2 )
GetFree 2015年

3
您会惊讶于这些问题在多年后如何继续帮助开发人员:-)
ManishKG

18

如果您不想打电话getTime(),请尝试以下操作:

(a >= b && a <= b)


17
WTF?为什么这样做有效,但相等运算符无效?那个意义在哪里?
Kuepper

9
相等运算符检查引用相等。这意味着仅当两个变量引用相同的对象时,它才返回true。如果创建两个Date对象(var a = new Date(); var b = new Date();),则它们将永远不相等。
托马斯

4
除了字符串,由值也比较,@ devmiles.com var a ="str1"; var b = "str"+"1"; a == b // true
AMD

7
怪异的 您可能以为这实际上是一个在==和===之间分隔的地方,这很有意义...等等它的JavaScript。我们在这里没有感觉!
JonnyRaa 2014年

7
@Towa,之所以有用,是因为> =和<=运算符仅对数字起作用,因此他们尝试将其操作数转换为数字。为了将对象(例如Date)转换为数字,JavaScript调用valueOf()函数以获取数字表示形式。:的valueOf()返回相同的东西的getTime()developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/...
迈克·申克

2
var d1 = new Date($('#datein').val());
var d2 = new Date($('#dateout').val());

使用两种简单的方法来检查相等性

  1. if( d1.toString() === d2.toString())
  2. if( +d1 === +d2)
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.