首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >JavaScript日期对象比较

JavaScript日期对象比较
EN

Stack Overflow用户
提问于 2011-09-30 14:42:28
回答 5查看 84.2K关注 0票数 93

当比较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

我怎么能比较这些日期的相等呢?我感兴趣的是使用JS的原生Date对象,而不是任何第三方库,因为只使用第三方JS来比较日期是不合适的。

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2011-09-30 14:47:36

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

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

如果您希望更明确地转换为number,请使用以下任一方法:

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

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

哦,对规范的引用:§11.9.3 The Abstract Equality Comparison Algorithm基本上是这样说的,当比较对象时,只有当它们引用相同的对象时,obj1 == obj2才为真,否则结果为假。

票数 141
EN

Stack Overflow用户

发布于 2011-09-30 14:48:58

使用从纪元开始返回毫秒数(即一个数字)的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中的日期始终使用客户端(浏览器)时区表示。

票数 27
EN

Stack Overflow用户

发布于 2011-09-30 16:38:38

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

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

var diff= (startDate1 -startDate2)

//如果日期具有相同的时间戳,则计算结果为0

票数 17
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7606798

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档