Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/extjs/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JavaScript日期对象比较_Javascript - Fatal编程技术网

JavaScript日期对象比较

JavaScript日期对象比较,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

在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只是比较日期是不合适的。

这是因为在第二种情况下,实际的日期对象是比较的,两个对象永远不相等。强迫他们打电话:

 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