【问题标题】:JavaScript Date Bug February 2014JavaScript 日期错误 2014 年 2 月
【发布时间】:2014-04-30 18:55:39
【问题描述】:

所以我有这个 JS 代码:

var d1 = new Date();
d1.setFullYear(2014);
d1.setMonth(1);
d1.setDate(1);

应该是 2014 年 2 月 1 日,对吧?只是它不是......它返回 Mar-01-2014(实际上,完整值是“Sat Mar 01 2014 20:54:29 GMT+0100 (Romance Standard Time)”)。我勒个去?任何其他日期值都会发生同样的事情。

但是,如果我使用此代码,它可以正常工作:

var d1 = new Date(2014, 1, 1, 0, 0, 0, 0);

结果是:2014 年 2 月 1 日星期六 00:00:00 GMT+0100(浪漫标准时间)

有什么想法吗?

【问题讨论】:

    标签: javascript date


    【解决方案1】:

    这是发生了什么,一行一行:

    您使用今天的日期创建一个新的日期对象。

    var d1 = new Date(); // d1 = 2014-04-30
    

    然后您将年份设置为 2014 年,它已经是,所以什么都没有发生。

    d1.setFullYear(2014); // d1 = 2014-04-30
    

    这是棘手的部分,因为现在您将月份更改为二月。但这会使日期 2 月 30 日 (2014-02-30) 不存在,因此 JavaScript 将尝试找到最接近的有效日期,即 3 月 1 日 (2014-03-01)。

    d1.setMonth(1); // d1 = 2014-02-30 is not valid so JS makes it 2014-03-01
    

    然后您将日期设置为该月的第一天,它已经是,所以这里也没有真正发生。

    d1.setDate(1) // d1 = 2014-03-01
    

    【讨论】:

    • 感谢所有回复的人!我现在明白我做错了什么...问题解决了!
    【解决方案2】:

    您需要先调用 setDate。基本上它是抓住月份并使用当前日期,因为二月没有 30 日,所以它默认为三月。

    【讨论】:

      【解决方案3】:

      最好初始化 Date,而不是让它默认为当前日期。

      var d1 = new Date(0); // 1 January 1970 00:00:00 UTC
      

      【讨论】:

        【解决方案4】:

        试试这个:

        d1.setFullYear(2014);
        d1.setDate(1);
        d1.setMonth(1);
        

        你在做什么:

        d1.setFullYear(2014);  // change year to 2014 (30 Apr 2014 -> 30 Apr 2014)
        d1.setMonth(1);        // change month to 1 (30 Apr 2014 -> 30 Feb 2014, really 2 Mar 2014)
        d1.setDate(1);         // change day of month to 1 (2 Mar 2014 -> 1 Mar 2014)
        

        通过先设置日期,您将日期更改为 2014 年 4 月 1 日,然后再更改月份。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2021-08-21
          • 2014-04-02
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多