文章出處
文章列表
在一段判斷是否過期的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)) { //... }
這種反直覺的設計很容易讓人踩坑,以后還是用字符串的形式保險。
文章列表
全站熱搜