JavaScript日期对象比较
在Javascript中比较日期对象时,我发现即使比较相同的日期也不会返回trueJavaScript日期对象比较,javascript,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
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只是比较日期是不合适的。这是因为在第二种情况下,实际的日期对象是比较的,两个对象永远不相等。强迫他们打电话:
alert( +startDate2 == +startDate3 ); // true
如果要更明确地转换为数字,请使用以下任一选项:
alert( startDate2.getTime() == startDate3.getTime() ); // true
或
噢,对规范的引用:§11.9.3基本上说,当比较对象时,
obj1==obj2
仅当它们引用同一对象时才为真,否则结果为假。使用getTime()
返回历元的毫秒数(即一个数字)比较日期:
也考虑使用<代码>日期>代码>构造函数,使用显式年/月/日期数,而不是依赖于字符串表示(参见:)。请记住,JavaScript中的日期始终使用客户端(浏览器)时区表示。
您可以比较实际毫秒数:alert(startDate2.getTime() === startDate3.getTime());
您不需要使用getTime方法-您可以从另一个日期对象中减去一个日期对象。它将返回毫秒差(负,如果第二个是更晚的日期)
//如果日期具有相同的时间戳,则计算结果为0。您还可以使用函数valueOf()
@安德烈。在这种特殊情况下使用严格等于不会对结果产生任何影响,这是因为示例中的等于运算符总是处理相同类型的操作数,@RobG将值显式转换为数字(示例1和3)或示例2中的值,我们知道,
Date.prototype.getTime
总是会返回一个数字……仅供参考,这些方法之间存在着显著的性能差异:@Nick即使是最慢的版本运行时间也不到一微秒,因此虽然存在比较差异,但从绝对值来看,性能差异可以忽略不计。OP应该选择最适合的方法,可能使用getTime
最清晰(在我测试的浏览器中也是最快的)。@RobG你知道,你是绝对正确的。=)我写了一个库,做了一个测试“just cuz”。在真正的软件中,它没有任何区别。@Johannes请参阅和.1,以获取有关使用字符串作为参数的注释。这是JavaScript设计拙劣的一个很好的例子。+1简单而优雅,imo首选解决方案:它使用内置的日期评估功能,无需强制使用数字时间戳
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
alert(startDate2.getTime() === startDate3.getTime());
var startDate1 = new Date("02/10/2012");
var startDate2 = new Date("01/10/2012");
var diff= (startDate1 -startDate2)
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