JavaScriptdate对象比较

当在Javascript中比较date对象时,我发现即使比较相同的date也不会返回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 

我怎么能比较这些date的平等? 我有兴趣使用JS的本地Date对象,而不是任何第三方库,因为它不适合使用第三方JS来比较date。

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

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

如果你想要更多的数字转换,使用:

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

要么

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

呵呵,对规范的引用:§11.9.3 抽象平等比较algorithm基本上说比较对象时, obj1 == obj2只有当它们指向同一个对象时才是真的,否则结果是false。

比较date使用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构造函数,而不是依靠string表示forms(请参阅: Date.parse() )来明确年/月/日的数字。 请记住,JavaScript中的date始终是使用客户端(浏览器)时区表示的。

您不需要使用getTime方法 – 您可以从另一个date对象中减去一个date对象。 它将返回毫秒差(如果第二个是以后的date,则为负值)

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

//如果date具有相同的时间戳,则评估为0

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

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