Pesquisa de site

Calcule a data de ontem em JavaScript


Como posso calcular ontem como uma data em JavaScript?

Resposta #1

var date = new Date();

console.log(date); //# => Fri Apr 01 2011 11:14:50 GMT+0200 (CEST)

date.setDate(date.getDate() - 1);

console.log(date); //# => Thu Mar 31 2011 11:14:50 GMT+0200 (CEST)

Resposta #2

Aqui está um trecho contendo a resposta anterior e adicionando uma função arrow.

E aqui está uma biblioteca que escrevi para manipular instâncias de Date do JS.

// a (not very efficient) oneliner
let yesterday = new Date(new Date().setDate(new Date().getDate()-1));
console.log(`Yesterday (oneliner)\n${yesterday}`);

// a function call
yesterday = ( function(){this.setDate(this.getDate()-1); return this} )
            .call(new Date);
console.log(`Yesterday (function call)\n${yesterday}`);

// an iife (immediately invoked function expression)
yesterday = function(d){ d.setDate(d.getDate()-1); return d}(new Date);
console.log(`Yesterday (iife)\n${yesterday}`);

// oneliner using es6 arrow function
yesterday = ( d => new Date(d.setDate(d.getDate()-1)) )(new Date);
console.log(`Yesterday (es6 arrow iife)\n${yesterday}`);

// use a method
const getYesterday = (dateOnly = false) => {
  let d = new Date();
  d.setDate(d.getDate() - 1);
  return dateOnly ? new Date(d).toDateString() : d;
};
console.log(`Yesterday (method)\n${getYesterday()}`);
console.log(`Yesterday (method dateOnly=true)\n${getYesterday(true)}`);

// use Date.now
console.log(`Yesterday, using Date.now\n${new Date(Date.now() - 864e5)}`);
.as-console-wrapper {
    max-height: 100% !important;
}

Resposta #3

Para encontrar exatamente a mesma hora de ontem, no momento em que você executa a função, subtraia o número de milissegundos em um dia (86400000):

var yesterday = new Date(Date.now() - 86400000); // that is: 24 * 60 * 60 * 1000

Isso funciona bem se o seu caso de uso não se importar com imprecisões potenciais devido a peculiaridades do calendário (como o Horário de Verão), caso contrário, eu recomendaria usar https://moment.github.io/luxon/

Resposta #4

Tente isso

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

Resposta #5

Para generalizar a questão e fazer outros cálculos de diferença, use:

var yesterday = new Date((new Date()).valueOf() - 1000*60*60*24);

isso cria um novo objeto de data baseado no valor de "agora" como um inteiro que representa a época unix em milissegundos subtraindo um dia.

Dois dias atrás:

var twoDaysAgo = new Date((new Date()).valueOf() - 1000*60*60*24*2);

Uma hora atrás:

var oneHourAgo = new Date((new Date()).valueOf() - 1000*60*60);

Resposta #6

Eu uso a biblioteca moment, ela é muito flexível e fácil de usar.

No seu caso:

let yesterday = moment().subtract(1, 'day').toDate();

Resposta #7

new Date(new Date().setDate(new Date().getDate()-1))

Resposta #8

Usando Javascript

var today = new Date();
var yesterday1 = new Date(today.setDate(new Date().getDate() - 1));
var yesterday2 = new Date(today - 86400000);
var yesterday3 = new Date(Date.now() - 1000*60*60*24);
var yesterday4 = new Date(today.valueOf() - 1000*60*60*24);
console.log("Today: "+today);
console.log("Yesterday: "+yesterday1);
console.log("Yesterday: "+yesterday2);
console.log("Yesterday: "+yesterday3);
console.log("Yesterday: "+yesterday4);

Usando Moment

var today = moment();
var yesterday = today.subtract(1, 'day').format('DD MMM YYYY');
console.log("Yesterday :",yesterday);
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.29.4/moment.min.js"></script>

Artigos relacionados