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());