JavaScript日期对象比较

时间:2011-09-30 06:42:28

标签: javascript

在比较Javascript中的日期对象时,我发现即使比较相同的日期也不会返回true。

 var startDate1 = new Date("02/10/2012");
 var startDate2 = new Date("01/10/2012");
 var startDate3 = new Date("01/10/2012");
 alert(startDate1>startDate2); // true
 alert(startDate2==startDate3); //false

我如何比较这些日期的相等性?我有兴趣使用JS的本地Date对象,而不是任何第三方库,因为它不适合使用第三方JS来比较日期。

5 个答案:

答案 0 :(得分:118)

这是因为在第二种情况下,比较实际日期对象,并且两个对象永远不会彼此相等。强迫他们编号:

 alert( +startDate2 == +startDate3 ); // true

如果您想要更明确地转换为数字,请使用:

 alert( startDate2.getTime() == startDate3.getTime() ); // true

 alert( Number(startDate2) == Number(startDate3) ); // true

哦,对规范的引用:§11.9.3The Abstract Equality Comparison Algorithm基本上说在比较对象时,obj1 == obj2只有在引用同一个对象时才为真,否则结果为false。 / p>

答案 1 :(得分:20)

使用getTime()比较纪元(即数字)返回的毫秒数来比较日期:

var startDate1 = new Date("02/10/2012");
var startDate2 = new Date("01/10/2012");
var startDate3 = new Date("01/10/2012");
alert(startDate1.getTime() > startDate2.getTime()); // true
alert(startDate2.getTime() == startDate3.getTime()); //true

还要考虑使用Date构造函数获取明确的年/月/日期编号,而不是依赖于字符串表示(请参阅:Date.parse())。请记住,JavaScript中的日期始终使用客户端(浏览器)时区来表示。

答案 2 :(得分:9)

您不需要使用getTime方法 - 您可以从另一个日期对象中减去日期对象。它将返回毫秒差异(如果第二个是较晚的日期则为负)

var startDate1 = new Date("02/10/2012");
var startDate2 = new Date("01/10/2012");

var diff= (startDate1 -startDate2)

//如果日期具有相同的时间戳

,则计算结果为0

答案 3 :(得分:4)

你可以比较实际的毫秒数:

alert(startDate2.getTime() === startDate3.getTime());

答案 4 :(得分:0)

您还可以使用函数valueOf()

 var startDate1 = new Date("02/10/2012").valueOf();
 var startDate2 = new Date("01/10/2012").valueOf();
 var startDate3 = new Date("01/10/2012").valueOf();
 alert(startDate1>startDate2); // 1326150000000 > 1328828400000   true
 alert(startDate2==startDate3); // 1328828400000 > 1326150000000  false