搜索

首页  >  问答  >  正文

比较 JavaScript 的 Date 对象

<p>在 JavaScript 中比较日期对象时,我发现即使是比较相同的日期也不会返回 true。</p> <pre class="brush:php;toolbar: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</pre> <p>我该如何比较这些日期的相等性?我希望使用原生的 JavaScript Date 对象,而不是任何第三方库,因为仅仅为了比较日期而使用第三方 JavaScript 库是不合适的。</p>
P粉724737511P粉724737511489 天前541

全部回复(2)我来回复

  • P粉794177659

    P粉7941776592023-08-04 15:33:36

    使用 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 中的日期始终使用客户端(浏览器)的时区表示。

    回复
    0
  • P粉990568283

    P粉9905682832023-08-04 12:15:10

    这是因为在第二种情况下,实际的日期对象被比较,而两个对象永远不会相等。将它们强制转换为数字:

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

    如果您想要更明确地将其转换为数字,可以使用以下方法之一:

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

    o或者

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

    是参考规范的 §11.9.3 抽象相等比较算法,基本上它说当比较对象时,只有当 obj1 == obj2 引用同一个对象时才为真,否则结果为假。

    回复
    0
  • 取消回复