Pergunta

Preciso diminuir uma data Javascript em 1 dia, para que ela reverta meses/anos corretamente.Ou seja, se eu tiver uma data de ‘Hoje’, quero pegar a data de ‘Ontem’.

Sempre parece ser necessário mais código do que o necessário quando faço isso, então estou me perguntando se existe alguma maneira mais simples.

Qual é a maneira mais simples de fazer isso?

[Editar:Apenas para evitar confusão na resposta abaixo, esta é uma JavaScript pergunta, não Java.]

Foi útil?

Solução

var d = new Date();
d.setDate(d.getDate() - 1);

console.log(d);

Outras dicas

var today = new Date();
var yesterday = new Date().setDate(today.getDate() -1);
 day.setDate(day.getDate() -1); //will be wrong

isso retornará o dia errado.sob UTC -03:00, verifique

var d = new Date(2014,9,19);
d.setDate(d.getDate()-1);// will return Oct 17

Melhor uso:

var n = day.getTime();
n -= 86400000;
day = new Date(n); //works fine for everything

getDate()-1 deveria fazer o truque

Exemplo rápido:

var day = new Date( "January 1 2008" );
day.setDate(day.getDate() -1);
alert(day);
origDate = new Date();
decrementedDate = new Date(origDate.getTime() - (86400 * 1000));

console.log(decrementedDate);

setDate(dayValue)

dayValue é um número inteiro de 1 a 31, representando o dia do mês.

de https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Global_Objects/Date/setDate

O comportamento que resolve o seu problema (e o meu) parece estar fora do intervalo de especificações.

O que parece ser necessário são addDate(), addMonth(), addYear() ...funções.

Trabalhar com datas em JS pode ser uma dor de cabeça.Então a maneira mais simples é usar momento.js para qualquer operação de data.

Para subtrair um dia:

const date = moment().subtract(1, 'day')
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top