文章出處

在一段判斷是否過期的js代碼中是這么寫的:

if (new Date() < new Date(2014, 9, 25)) {
    //...
}

后來發現過了9月25日竟然不過期,console.log打印一下new Date(2014, 9, 25)的值:

Sat Oct 25 2014 00:00:00 GMT+0800 (CST) 

竟然變成了10月25日!于是,判斷是否過期的js代碼形同虛設,永遠也不會過期。

原來javscript中的new Date(year, month, day, hours, minutes, seconds, milliseconds)不能指定過去的時間。

而解決這個問題需要給new Date傳遞字符串格式的日期參數,代碼如下:

if (new Date() < new Date('Sep 25, 2014')) {
    //...
}

【更新】

謝謝ievil在評論中指出問題的真正原因!

原來在js中月份是從0開始計算的,“9月”對應的值是8。只需要改成這樣就能解決問題:

if (new Date() < new Date(2014, 8, 25)) {
    //...
}

這種反直覺的設計很容易讓人踩坑,以后還是用字符串的形式保險。


文章列表


不含病毒。www.avast.com
arrow
arrow
    全站熱搜
    創作者介紹
    創作者 大師兄 的頭像
    大師兄

    IT工程師數位筆記本

    大師兄 發表在 痞客邦 留言(0) 人氣()