var d = new Date();
d.setMonth(d.getMonth() - 3);
Isso funciona para janeiro. Execute este trecho:
var d = new Date("January 14, 2012");
console.log(d.toLocaleDateString());
d.setMonth(d.getMonth() - 3);
console.log(d.toLocaleDateString());
Existem algumas advertências ...
Um mês é uma coisa curiosa. Como você define 1 mês? 30 dias? A maioria das pessoas vai dizer que há um mês meio no mesmo dia do mês em relação ao mês anterior carece de fontes . Mas mais da metade do tempo, isto é, 31 dias atrás, não 30. E se hoje é o 31 de mês (e não é agosto ou dezembro), esse dia do mês não existe no mês anterior.
Curiosamente, o Google concorda com o JavaScript se você perguntar que dia é um mês antes de outro dia :
Ele também diz que um mês dura 30.4167 dias :
Então, um mês antes de 31 de março é o mesmo dia que um mês antes de 28 de março, três dias antes? Tudo isso depende do que você quer dizer com "um mês antes". Vá conversar com o proprietário do produto.
Se você deseja fazer como o momentjs, e corrigir esses erros do último dia do mês, movendo para o último dia do mês, você pode fazer algo assim:
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());
Se seus requisitos forem mais complicados do que isso, use um pouco de matemática e escreva um código. Você é um desenvolvedor! Você não precisa instalar uma biblioteca! Você não precisa copiar e colar do stackoverflow! Você mesmo pode desenvolver o código para fazer exatamente o que precisa!