Cómo comparar solo la fecha en moment.js

107

Soy nuevo en moment.js. Tengo un objeto de fecha y tiene algún tiempo asociado a él. Solo quiero verificar si esa fecha es mayor o igual a la fecha de hoy, excluyendo el tiempo al comparar.

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

Solo quiero verificar si dateToCompare es igual o mayor que la fecha de hoy. He comprobado que es el mismo de moment.js, pero parece que toma una cadena y solo la parte de la fecha. Pero no quiero convertir mi fecha en una cadena o manipularla más. Porque me preocupa que javascript pueda hacer algo inesperado al convertir esa fecha en una cadena (como agregar el desplazamiento o dst, etc.), o puede que me equivoque.

Ejemplo de isSame () de documentos

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

También estoy buscando algo como isSame () e isAfter () combinados como una declaración.

Necesito comparar usando solo moment.js.Por favor, no sugiera una comparación simple de fechas de JavaScript.

NoobGeek
fuente

Respuestas:

183

Los documentos son bastante claros en que pasa un segundo parámetro para especificar la granularidad.

Si desea limitar la granularidad a una unidad que no sea milisegundos, pase las unidades como segundo parámetro.

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

Como el segundo parámetro determina la precisión, y no solo un valor único para verificar, el uso de día verificará el año, mes y día.

Para su caso, pasaría 'day'como segundo parámetro.

zzzzBov
fuente
1
¡Gracias! parece que no tengo que convertir a una cadena. Pero, ¿tenemos algún método común para isSame () e isAfter ()
NoobGeek
2
Ya lo he usado. ¡Gracias! Solo quería ver si hay una función común, no es que sea difícil usar ambas.
NoobGeek
@kabirbaidhya, antes de realizar importantes ediciones no solicitadas, se considera de buena educación publicar un comentario sobre preguntas y respuestas señalando problemas. No creo que las ediciones que hiciste fueran necesarias, así que las revertí. Si cree que la información es importante, considere publicar su propia respuesta.
zzzzBov
4
Solo para complementar: "Como el segundo parámetro determina la precisión, y no solo un valor único para verificar, el uso de día verificará el año, el mes y el día".
eveevans
6
@NoobGeek Ahora hay isSameOrBefore () e isSameOrAfter () desde la versión 2.10.7 en adelante.
WhiteHotLoveTiger
6

En mi caso, hice el siguiente código para comparar 2 fechas, puede que te ayude ...

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
fuente
6

Podría usar el startOf('day')método para comparar solo la fecha

Ejemplo:

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

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