¿Comó comparar dos fechas en Javascript únicamente por la fecha?

publicado por: Anonymous

Hola tengo el siguiente inconveniente, tengo un conjunto de pares de fechas provenientes de diferentes eventos, las cuales deseo comparar con una fecha especifica.

Para los tipos Date, Javascript soporta los operadores >, <, ===, !==, >=, <= para la comparación compara la fecha completa incluyendo fecha y horas que es lo correcto pero, aquí es donde surge mi problema ya que solo estoy necesitando comparar únicamente las fechas sin contemplar la hora.

Simplifico el problema en un ejemplo sencillo:

let inicio = new Date('2017-09-06T20:56:51'); 
let fin = new Date('2017-09-06T20:56:53');

// fecha a comparar si se encuentra en el rango
let comparador = new Date('2017-09-06T12:56:53');

// aqui es el problema
let resultado = inicio <= comparador && fin >= comparador

Si comparara únicamente por fechas omitiendo la hora, resultado devolvería true.

solución

Sabiendo que un día son 24 * 3600 * 1000 milisegundos, puedes tomar el valor UNIX Time de cada fecha para obtener el número de días pasados desde el origen, ignorando el resto (los decimales):

_x000D_

_x000D_

let date= new Date();_x000D_
let dayInMillis=24*3600000;_x000D_
_x000D_
function compareDates(date1,date2) {_x000D_
  // Nos quedamos con los días completos pasados desde el 1 de enero de 1970_x000D_
  let days1=Math.floor(date1.getTime()/dayInMillis);_x000D_
  let days2=Math.floor(date2.getTime()/dayInMillis);_x000D_
  // comparamos los días_x000D_
  if (days1>days2) {_x000D_
    return 1;_x000D_
  } else if (days1<days2) {_x000D_
    return -1;_x000D_
  }_x000D_
  return 0;_x000D_
}_x000D_
_x000D_
// prueba comparando dos fechas con al menos 300 milisegundos de diferencia_x000D_
setTimeout(()=> {_x000D_
  let date2= new Date();_x000D_
  console.log(compareDates(date,date2));_x000D_
},300);

_x000D_

_x000D_

_x000D_

La función comparadora sigue el estándar: devuelve 1 si el primer parámetro es mayor que el segundo, 0 si son iguales y -1 si el segundo parámetro es mayor que el primero

Respondido por: Anonymous

Leave a Reply

Your email address will not be published. Required fields are marked *