javascript date как взять дату предыдущего дня?

293
07 сентября 2017, 19:58

Доброе утро. Столкнулся с такой проблемой, хочу взять дату предыдущего дня, но когда дата это первый день в году то работа даты 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());

Answer 1

Вы установили дату на 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 и все.

Answer 2

Вариант с вычитанием 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
READ ALSO
SVG анимация графика

SVG анимация графика

Добрый день, подскажите как сделать так что бы "ползунок" не "дрифтовал" по графику, а плавно перетекал, как капля, и повторял изгибы графика?

222
Почему не работает LIMIT SQL?

Почему не работает LIMIT SQL?

Здравствуйте, почему-то этот код циклит лишь первую запись:

283
Не работает функция PDO

Не работает функция PDO

До определенного момента все работало, после того, как сделал условия, перестало :с Ошибок не выдает, но с базой ничего не делает ни в одном...

378
Почему не работает синтаксис PHP в PHPStorm?

Почему не работает синтаксис PHP в PHPStorm?

Ребят, приветНе могу разобраться в проблеме PhpStorm

368