Comparando Objetos de Data Javascript

Compartilhado anteriormente pelo link de meu bom amigo
, perguntei-me como você compara efetivamente datas Javascript de maneira modular e concisa.

Basicamente, se você tentar comparar um objeto de data javascript, provavelmente nunca obterá uma instrução igual disparando true. Isso ocorre porque eles estão comparando os objetos e não as informações reais de data e hora que ele contém.

Minha abordagem para comparação de datas seria a primeira.

Faça com que ambos tenham valores tangíveis com os quais possamos trabalhar.
Fazemos isso com o método valueOf ou getTime, usarei valueOf para este exemplo 🙂

var a = new Date();
var b = new Date();
var c = new Date();
c
.setHour(c.getHour() + 1); // set to 1 hour after var a & b

a
== b; // returns false
a
> b; // returns false
a
< b; // returns false

b
.valueOf() == a.valueOf(); // returns true
c
.valueOf() > a.valueOf(); // returns true

parseInt
(b.valueOf() / 1000) == parseInt(a.valueOf() / 1000); // comparing he values removing milliseconds. Should still return true.

parseInt
(c.valueOf() / 1000/60/60/24) == parseInt(a.valueOf() / 1000/60/60/24); // comparing C to B but this time ignoring hour difference. only comparing day itself. Should return true.

Observe que depois disso você não poderá mais contabilizar as diferenças mensais devido às diferenças do mês do calendário.