Como comparar apenas a data em moment.js

107

Eu sou novo no moment.js. Eu tenho um objeto de data e tem algum tempo associado a ele. Só quero verificar se essa data é maior ou igual à data de hoje, excluindo a hora na comparação.

 var dateToCompare = 2015-04-06T18:30:00.000Z

Só quero verificar se dateToCompare é igual ou maior que a data de hoje. Eu verifiquei isSame de moment.js, mas parece levar string e apenas a parte da data. Mas não quero converter minha data em string ou manipulá-la ainda mais. Porque estou preocupado que o javascript pode fazer algo inesperado ao converter essa data em string (como adicionar o deslocamento ou dst, etc), ou posso estar errado.

Exemplo de isSame () de documentos

moment('2010-10-20').isSame('2010-10-20');

Também estou procurando algo como isSame () e isAfter () combinados como uma instrução.

Eu preciso comparar usando apenas moment.js. Por favor, não sugira comparação de datas em javascript simples.

NoobGeek
fonte

Respostas:

183

Os documentos são bastante claros quando você passa um segundo parâmetro para especificar a granularidade.

Se você quiser limitar a granularidade a uma unidade diferente de milissegundos, passe as unidades como o segundo parâmetro.

moment('2010-10-20').isAfter('2010-01-01', 'year'); // false
moment('2010-10-20').isAfter('2009-12-31', 'year'); // true

Como o segundo parâmetro determina a precisão, e não apenas um único valor a ser verificado, usar dia irá verificar ano, mês e dia.

Para o seu caso você passaria 'day'como segundo parâmetro.

zzzzBov
fonte
1
Obrigado! Parece que não preciso converter para string. Mas temos algum método comum para isSame () e isAfter ()
NoobGeek de
2
Eu já usei isso. Obrigado! só queria ver se existe uma função comum, não que seja difícil usar as duas.
NoobGeek,
@kabirbaidhya, antes de fazer edições não solicitadas consideráveis, é educado postar um comentário sobre as perguntas e respostas observando os problemas. Não acho que as edições que você fez foram necessárias, então as revirei. Se você acha que a informação é importante, por favor, considere postar sua própria resposta.
zzzzBov
4
Só para complementar: "Como o segundo parâmetro determina a precisão, e não apenas um único valor a verificar, usando dia irá verificar ano, mês e dia."
eveevans
6
@NoobGeek Agora existe isSameOrBefore () e isSameOrAfter () da versão 2.10.7 em diante.
WhiteHotLoveTiger
6

No meu caso, fiz o seguinte código para comparar 2 datas, pode ajudá-lo ...

var date1 = "2010-10-20";
var date2 = "2010-10-20";
var time1 = moment(date1).format('YYYY-MM-DD');
var time2 = moment(date2).format('YYYY-MM-DD');
if(time2 > time1){
	console.log('date2 is Greter than date1');
}else if(time2 > time1){
	console.log('date2 is Less than date1');
}else{
	console.log('Both date are same');
}
<script src="https://momentjs.com/downloads/moment.js"></script>

Renish Gotecha
fonte
6

Você pode usar o startOf('day')método para comparar apenas a data

Exemplo:

var dateToCompare = moment("06/04/2015 18:30:00");
var today = moment(new Date());

dateToCompare.startOf('day').isSame(today.startOf('day'));
Anurag Aron Tigga
fonte