javascript 1 月日期问题

javascript january date issue

function datecheck(){
    var dt1 = new Date();
    dt1.setUTCFullYear("2017");
    dt1.setUTCDate("1");
    dt1.setUTCMonth("1");
    alert(dt1.getUTCMonth());
}

当我执行此函数时,我收到 0 作为警报,但如果 setUTCMonth("2")。我进入警戒状态 2。同样,如果给出 3、4、5、6、7、8...,那么它会在过去的同一个月发出警报,那么 1 月份有什么问题?

但我也观察到如果

function datecheck(){
    var dt1 = new Date();
    dt1.setUTCFullYear("2017");
    dt1.setUTCMonth("1");
    dt1.setUTCDate("1");
    alert(dt1.getUTCMonth());
}

行为改变,当 1 通过时开始提醒 0。我完全不知道发生了什么......

谁能告诉我哪里错了。

提前致谢。

你有几个问题。首先,以这种方式改变 Date 对象是不可取的,除非你 真的 知道你在做什么。最好将所需的参数传递给构造函数:

var jan1 = new Date(2017, 0, 1);

请注意,我传递了零。这是因为与其他 date-related 计数不同,JavaScript 个月从 0 到 11。

其次,您忽略了时区的影响。 JavaScript 在本地时区构造 Date 对象。例如,我现在是 GMT -5。 如果我在浏览器的控制台中执行以下操作:

var dec31 = new Date(2016, 11, 31, 20); // 20hr == 8pm
dec31.getMonth();    // 11
dec31.getUTCMonth(); // 0

五个小时的偏移将 UTC 时间推到下个月。