Javascript setUTCMonth不适用于11月

时间:2014-10-31 18:36:03

标签: javascript utc

我在使用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(太平洋标准时间)}

然而,如果您使用t.setMonth(10),那么您正确地获得了11月。我做错了吗?

3 个答案:

答案 0 :(得分:6)

这将在明天按预期运作。

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

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

t.setUTCMonth(10, 20);

答案 1 :(得分: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);

答案 2 :(得分:0)

问题是特定日期的混合以及设置日期的各个部分的顺序。如果你逐步了解它发生了什么,那就更清楚了:

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