Javascript中new Date的坑

在一段判断是否过期的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)) {
    //...
}

这种反直觉的设计很容易让人踩坑,以后还是用字符串的形式保险。

posted @ 2014-10-08 11:32  dudu  阅读(25300)  评论(7编辑  收藏  举报