如何确定2个日期对象是否相等?

时间:2011-10-13 11:17:43

标签: javascript date

这是我在stackoverflow中的第一个问题。

var str="Oct 13,2011";
var date1=new Date(str);
var date2=new Date(str);

当然 的valueOf(DATE1)==的valueOf(DATE2)

但为什么呢 DATE1!= DATE2

或者说,如果两个日期对象彼此相等,如何确定它们。

日期是js对象

3 个答案:

答案 0 :(得分:4)

Javascript对象只有在引用相同的对象引用时才相等。在你的代码中并非如此。

(参考:What is the standard definition of object equality for "=="?

编辑:使用一点点类型转换,您可以执行以下操作:

var str="Oct 13,2011";
var date1 = new Date(str);
var date2 = new Date(str);

console.log(+date1 == +date2); // true

答案 1 :(得分:2)

=====比较对象引用。

Date1和date 2是从不同的引用创建的。因此,他们并不平等。

将date1和date2转换为原始数据类型并进行比较

date1.getTime()=== date2.getTime()

结果:是

答案 2 :(得分:1)

使用==一般不起作用,因为它比较对象identities而不是值。

在比较之前使用+前缀或getTime()转换为毫秒,如果日期对象具有时间组件并且您只想比较它们的日期部分,则也会失败。 (不要试图达到toDate()方法,因为那是月份的日期,并且丢弃月份和年份!)。

对于没有使用其他库的简洁解决方案,这似乎是toDateString()有用的少数几次之一。

var date1=new Date("2014-12-10");
var date2=new Date("2014-12-10T01:00");

+date1 == +date2
>false

date1.getTime() == date2.getTime()
>false

date1.toDateString() == date2.toDateString()
>true