【问题标题】:Javascript setUTCMonth does not work for November [duplicate]Javascript setUTCMonth 不适用于 11 月 [重复]
【发布时间】:2014-10-31 18:36:02
【问题描述】:

我在使用 Javascript 日期对象时遇到了一些非常奇怪的行为。

var t = new Date();
t.setUTCFullYear(2014);
t.setUTCMonth(10);
t.setUTCDate(20);
console.log(t);

这会返回: 日期 {2014 年 12 月 20 日星期六 10:26:23 GMT-0800 (PST)}

而如果你使用t.setMonth(10),你正确地得到了十一月。我做错了吗?

【问题讨论】:

    标签: javascript utc


    【解决方案1】:

    这将在明天按预期工作。

    今天(10 月 31 日),t 被初始化为 31。当您将月份设置为 11 月时,您设置的是“11 月 31 日”,该日期已更正为 12 月 1 日。

    然后您将日期设置为20,但月份已更改。首先设置日期,或者更好的是,使用setUTCMonth() 的两个参数版本:

    t.setUTCMonth(10, 20);
    

    【讨论】:

      【解决方案2】:

      也许我遗漏了一些东西(编辑:我是,Paul's answer 涵盖了它),但你是对的。但是,这可行:

      var t = new Date();
      t.setUTCFullYear(2014);
      t.setUTCMonth(10, 20); // Set day here instead
      console.log(t); // Thu Nov 20 2014 12:40:42 GMT-0600 (Central Standard Time)
      

      如果你切换 set 语句的顺序也可以:

      var t = new Date();
      t.setUTCFullYear(2014);
      t.setUTCDate(20);
      t.setUTCMonth(10);
      

      【讨论】:

        【解决方案3】:

        问题在于特定日期的混合以及设置日期各个部分的顺序。如果您逐步了解正在发生的事情,它会变得更加清晰:

        • 新日期初始化为今天:2014 年 10 月 31 日
        • 将年份设置为 2014:无效
        • 将月份设置为 11 月:2014 年 11 月 31 日被解释为 2014 年 12 月 1 日
        • 将日期设置为 20:2014 年 12 月 20 日

        【讨论】:

          猜你喜欢
          • 2021-08-06
          • 1970-01-01
          • 2015-08-28
          • 2017-05-23
          • 2014-03-25
          • 2018-04-03
          • 1970-01-01
          • 2015-02-12
          • 1970-01-01
          相关资源
          最近更新 更多