javascript январь дата выпуска

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..., тогда он предупреждает о том же месяце, который был пройден, тогда в чем проблема с январским месяцем?

Но также я заметил, что если

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

Изменение поведения - начало оповещения 0, когда 1 пройдено. Я полностью сбит с толку, что происходит...

Может кто-нибудь сказать мне, где я иду не так.

Заранее спасибо.

1 ответ

Решение

У вас есть пара проблем. Во-первых, мутируя Date объекты таким образом нецелесообразны, если вы действительно не знаете, что делаете. Лучше передать нужные параметры конструктору:

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

Обратите внимание, что я прошел в ноль. Это потому, что в отличие от любого другого подсчета дат, в JavaScript месяцы идут от 0 до 11.

Во-вторых, вы игнорируете влияние часовых поясов. JavaScript создает объекты Date в местном часовом поясе. Например, я сейчас GMT -5. Если я сделаю следующее в консоли моего браузера:

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

Пятичасовое смещение сдвигает время UTC в следующий месяц.

Другие вопросы по тегам