搜尋

首頁  >  問答  >  主體

比較 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 天前538

全部回覆(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
  • 取消回覆