在Javascript中确定日期相等性

99
我需要在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警告看起来像这样:

Tue Jan 25 2011 00:00:00 GMT-0800 (太平洋标准时间)

Tue Jan 25 2011 00:00:00 GMT-0800 (太平洋标准时间)

测试日期1是否大于日期2有效,但使用==或===操作符不会将valid更改为false。


3
你看过这篇帖子了吗:https://dev59.com/znRC5IYBdhLWcg3wUfN2。它有帮助吗? - JohnMerlino
我很想将其标记为重复,但我认为这是同一问题的边缘情况,所以我不会这样做。 - Liam
这不是重复内容。帖子提到的(以及被接受的答案)是关于确定日期是在另一个日期之前还是之后,而不是关于相等性的。 - yannick1976
5个回答

179

使用 getTime() 方法,它将检查日期的数字值,并且可以用于大于/小于检查以及相等检查。

编辑:

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

1
而我上面发布的stackoverflow问题展示了一个例子。这两个问题是相同的。 - JohnMerlino
30
更简单的写法: if( +d1 == +d2 )。该语句的意思是:将 d1d2 转换成数字类型后,判断它们是否相等。 - GetFree

25
如果你不想调用 getTime(),可以尝试这个方法:(a >= b && a <= b)

27
为什么这个方法可以正常工作,但等于操作符却无法实现相同的效果?这有什么道理吗? - Kuepper
12
相等运算符检查引用相等性。这意味着它仅在两个变量引用同一对象时返回true。如果您创建两个日期对象(var a = new Date(); var b = new Date();),它们永远不会相等。 - Tomas
5
除了字符串是按值比较外,@devmiles.com 中的其他内容需要翻译。代码示例中的意思是:变量a赋值为"str1",变量b赋值为"str"+"1",因此a == b返回true。 - amd
11
奇怪的。你可能认为在这个地方使用 == 和 === 有区别是有意义的...哦等等,这是JavaScript。我们这里不讲道理! - JonnyRaa
10
@Towa,这样做的原因是">="和"<="运算符只适用于数字,因此它们会尝试将其操作数转换为数字。要将对象(如Date)转换为数字,JavaScript调用valueOf()函数来获取数字表示形式。 valueOf()返回与getTime()相同的值:https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Date/valueOf - Mike Schenk
显示剩余2条评论

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

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

  1. if( d1.toString() === d2.toString())
  2. if( +d1 === +d2)

0
不必直接比较日期,你可以检查它们之间的差异是否为零。
if (d1 - d2 === 0)

-3
var date = Wed Oct 07 2015 19:48:08 GMT+0200 (Central European Daylight Time);

var dateOne = new Date(date);
var dateTwo = new Date();

var isEqual = dateOne.getDate() === dateTwo.getDate()

this will give you the dates equality


社区鼓励在代码旁边添加解释,而不是仅仅提供基于代码的答案(请参见此处)。 - costaparas
4
这是错误的。4月7日不同于3月7日。 - Mark Fisher

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接