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 в следующий месяц.