Доброе утро. Столкнулся с такой проблемой, хочу взять дату предыдущего дня, но когда дата это первый день в году то работа даты javascript не корректная.
Вот пример кода:
Здесь мне должен возвратить такой результат day - 31, month - 11 (месяцы из даты начинаются с 0 до 11) и year - 2016, но мой результат в примере вот такой day - 31, month - 0, year - 217
var d = new Date(2017, 1, 1);
d = new Date(d.getTime() - 86400000);
var from_day = d.getDate();
console.log(d.getTime());
console.log(from_day);
console.log(d.getMonth());
console.log(d.getFullYear());
Вы установили дату на 1 февраля.
var d = new Date(2017, 0, 1);
d = new Date(d.getTime() - 86400000);
var from_day = d.getDate();
console.log(d.getTime());
console.log(from_day);
console.log(d.getMonth());
console.log(d.getFullYear());
Поменял месяц на 0 и все.
Вариант с вычитанием 24 часов (или 86400000 мс.) может не всегда/не везде корректно работать. К примеру в дни когда происходит переход с летнего времени на стандартное в сутках будет 25 часов.
Если нужно получать предыдущий календарный день то корректнее будет делать так:
var d = new Date(2017, 1, 1); //1 февраля 2017
d.setDate(d.getDate() - 1); //d изменится на 31 января 2017
Функция setDate устанавливает день текущего месяца даты, при этом она учитывает расовой пояс пользователя (и переходы данного часового пояса). При этом если день месяца выходит за количество дней в данном месяца, то будет изменён месяц. Так, если на вход setDate передать 0 то месяц изменится на предыдущий, а день будет равен последнему дню предыдущего месяца. Если передать 29 то месяц изменится на следующий (т.к. в феврале 2017 только 28 дней).
var d = new Date(2017, 0, 1); //1 января 2017
d.setDate(d.getDate() - 1); // d изменится на 31 декабря 2016
Современные инструменты для криптотрейдинга: как технологии помогают принимать решения
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости