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!
Eu recomendo usar uma biblioteca chamada Moment.js.
É bem testado, funciona em vários navegadores e no lado do servidor (estou usando-o nos projetos Angular e Node). Ele oferece excelente suporte para datas de localidade.
http://momentjs.com/
.format()
retorna a representação de string da data formatada no formato ISO 8601 . Você também pode usá-lo com formato de data personalizado como este:.format('dddd, MMMM Do YYYY, h:mm:ss a')
fonte
Um "one liner" (em várias linhas para facilitar a leitura)) a ser colocado diretamente em uma variável:
fonte
Para simplificar as coisas, você pode usar o DateJS, uma biblioteca de datas para JavaScript:
http://www.datejs.com/
Código de exemplo para você:
fonte
Isso deve lidar com adição / subtração, basta colocar um valor negativo para subtrair e um valor positivo para adicionar. Isso também resolve o problema de cruzamento do mês.
fonte
Se o
setMonth
método oferecido por gilly3 não for o que você procura, considere:Pode ser usado por qualquer período de tempo, basta definir os múltiplos certos.
fonte
Date
classe seja, e por mais que o Date.js. seja o preferido, ele pelo menos modela um calendário proléptico brando que é bom o suficiente para uso casual.setTime()
?Gosto da simplicidade da resposta de gilly3 , mas os usuários provavelmente ficarão surpresos que um mês antes de 31 de março seja 3 de março. Optei por implementar uma versão que se adere ao final do mês, portanto, um mês antes de 28, 29, 30 de março, e 31 serão 28 de fevereiro, quando não for um ano bissexto.
fonte
Já existe uma resposta elegante, mas acho que é difícil de ler, então fiz minha própria função. Para meus propósitos, não precisava de um resultado negativo, mas não seria difícil de modificar.
fonte
fonte
Este é o código menor e mais fácil.
Declare a variável que tem data atual. apenas usando a função setMonth inbuilt, podemos obter uma data anterior de 3 meses.
fonte
No meu caso, eu precisava subtrair 1 mês para a data atual. A parte importante era o número do mês, por isso não importa em que dia do mês atual você está, eu precisava do mês passado. Este é o meu código:
Substrato 1 mês até a data real não é preciso, por isso, em primeiro lugar, defino o primeiro dia do mês (o primeiro dia de qualquer mês sempre é o primeiro dia) e, em segundo lugar, subtraio 1 dia, que sempre o envia para o mês passado. Espero ajudá-lo, cara.
fonte
fonte
Passe um objeto JS Date e um número inteiro de quantos meses você deseja adicionar / subtrair.
monthsToAdd
pode ser positivo ou negativo. Retorna um objeto de data JS.Se você
originalDateObject
é 31 de março e passa -1 comomonthsToAdd
, então a data de saída será 28 de fevereiro.Se você passar um grande número de meses, digamos 36, ele também cuidará do ajuste do ano.
fonte
fonte
fonte