【问题标题】:Javascript month is wrong [duplicate]Javascript月份是错误的[重复]
【发布时间】:2017-10-31 14:42:50
【问题描述】:

请有人告诉我,如果月份的值高于 9,为什么月份会增加 1。代码如下

var dd = new Date();
dd.setFullYear(2017);
dd.setMonth(7);
console.log("Month(Expecting 7, and received 7) = " + dd.getMonth());
dd.setMonth(10);
console.log("Month(Expecting 10, and received 11) = " + dd.getMonth());

Fiddler 代码在这里 - https://jsfiddle.net/vzmtp3ua/

【问题讨论】:

  • 因为这个月有 31 天,所以现在是 31 天。没有 11 月 31 日 ;)

标签: javascript date


【解决方案1】:

因为每个月不存在 31 天,所以将多余的天数添加到下个月。

将日期设置为 10 月 31 日,加上一个月,因为日期移到 12 月 1 日还有 30 天,所以它是 11 月 31 日。

【讨论】:

    【解决方案2】:

    在某些月份,天数少于 31 天,因此下个月会增加额外的天数

    【讨论】:

      【解决方案3】:

      这与该月的天数有关,使日期转移到下个月的第一天。 文档中提到了这一点:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/setMonth

      当前日期将对该方法的行为产生影响。从概念上讲,它将当月的当天给定的天数与指定为参数的新月的第一天相加,以返回新的日期。例如,如果当前值为 2016 年 8 月 31 日,则调用值为 1 的 setMonth 将返回 2016 年 3 月 2 日。这是因为 2016 年 2 月有 29 天。

      【讨论】:

        【解决方案4】:

        并非所有月份都有相同的天数 (31),因此下一个将移至下个月

        【讨论】:

          【解决方案5】:

          当您在 10 月 31 日创建 Date 对象,然后将月份设置为 11 月(= 10!),它没有 31 天,它将切换到下个月 1 日(12 月 1 日)。

          【讨论】:

            【解决方案6】:

            这取决于当前日期。您将日期初始化为“现在”(new Date()),今天是 10 月 31 日。

            如果您的 Date 对象上的日期是 31 日,并且您致电 setMonth(),则在短于 31 天的月份中,多余的天数将持续到下个月。如果您尝试setMonth(1),则表示 2 月 31 日,因此您将获得 3 月 3 日。

            为避免该问题,您可以传递第二个参数 setMonth,这是要设置的日期,例如dd.setMonth(10,30)(11 月 30 日)。

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 2023-03-04
              • 1970-01-01
              • 2010-12-17
              • 1970-01-01
              • 2012-08-28
              相关资源
              最近更新 更多