zoukankan      html  css  js  c++  java
  • 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)) {
        //...
    }

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

  • 相关阅读:
    [Luogu]小Z的AK计划
    [POI2006]OKR-Periods of Words
    [NOI2014]动物园
    [NOI2009]管道取珠
    [IOI2005]河流
    [国家集训队]Crash的文明世界
    [HDU5382]GCD?LCM!
    [AGC027E]ABBreviate
    [CF]Round510
    [NOIp2005]篝火晚会
  • 原文地址:https://www.cnblogs.com/dudu/p/javascript_new_date.html
Copyright © 2011-2022 走看看