var d = new Date();
d.setMonth(d.getMonth() - 3);
Это работает на январь. Запустите этот фрагмент:
var d = new Date("January 14, 2012");
console.log(d.toLocaleDateString());
d.setMonth(d.getMonth() - 3);
console.log(d.toLocaleDateString());
Есть некоторые предостережения ...
Месяц это любопытная вещь. Как вы определяете 1 месяц? 30 дней? Большинство людей скажут , что один месяц назад средства в тот же день месяца , в предыдущем месяце цитации . Но более половины времени, то есть 31 день назад, а не 30. И если сегодня 31 число месяца (а это не август или декабрь), то этот день месяца не существует в предыдущем месяце.
Интересно, что Google соглашается с JavaScript, если вы спросите его, какой день за месяц до следующего :
В нем также говорится, что один месяц длится 30,4167 дней :
Итак, один месяц до 31 марта совпадает с днем до 28 марта, 3 днями ранее? Все зависит от того, что вы подразумеваете под «месяцем ранее». Поговорите с владельцем вашего продукта.
Если вы хотите сделать то же, что и momentjs, и исправить эти ошибки в последний день месяца, перейдя к последнему дню месяца, вы можете сделать что-то вроде этого:
const d = new Date("March 31, 2019");
console.log(d.toLocaleDateString());
const month = d.getMonth();
d.setMonth(d.getMonth() - 1);
while (d.getMonth() === month) {
d.setDate(d.getDate() - 1);
}
console.log(d.toLocaleDateString());
Если ваши требования сложнее, используйте математику и напишите немного кода. Вы разработчик! Вам не нужно устанавливать библиотеку! Вам не нужно копировать и вставлять из stackoverflow! Вы можете разработать код самостоятельно, чтобы делать именно то, что вам нужно!