JavaScript日期比较

时间:2010-05-22 16:22:50

标签: javascript datetime

为什么在第一种情况下,相等运算符返回false?

var a = new Date(2010, 10, 10);
var b = new Date(2010, 10, 10);
alert(a == b); // <- returns false
alert(a.getTime() == b.getTime()); // returns true

为什么?

4 个答案:

答案 0 :(得分:28)

由于日期是内置对象,而不是primitives,因此使用对象引用完成相等性检查。

在这种情况下,对象ab不是同一个对象,因此测试失败。
您可以使用

查看相同内容
var a = new String("a");
var b = new String("a");
alert(a == b); //false

通过使用.getTime.valueOf,您将对象值转换为基元,并且这些值始终按值而不是按引用进行比较。

如果你想按两个日期的值进行比较,那么还有一种比较模糊的方法呢

var a = new Date(2010, 10, 10);
var b = new Date(2010, 10, 10);

alert(+a == +b); //true

在这种情况下,一元+运算符强制javascript引擎调用对象valueOf方法 - 因此它是两个被比较的基元。

答案 1 :(得分:0)

Compare two dates with JavaScript

dates.compare(A,B)

事实是两个对象之间的比较无法正常工作:/

答案 2 :(得分:0)

如果您创建两个时钟,并将它们设置为同一时间,则有两个时钟。

如果您在一个时钟中更改时间,则不会更改另一个时钟的时间。

比较或排序日期,从另一个中减去一个。 在数学表达式中使用的Date对象的值是其时间戳。

function compareDates(a,b){return a-b};

答案 3 :(得分:-1)

我很抱歉,但这很愚蠢......特别是关于两个时钟的问题。

==,根据定义比较VALUES,而===比较参考。对于非原语来说==失败会破坏语言自己的语法结构。当然,===在初始示例中会失败,因为两个日期显然是指向两个不同内存空间的两个不同指针,但是,根据JS规范的定义,==应返回TRUE以进行两个比较价值相同的日期。

我讨厌JS的另一个原因......

很抱歉咆哮,但这只是把我的屁股踢了一个小时。

顺便说一下,你可以使用valueOf()强制比较值,这将返回true ...它是多余的==但是它有效。