Día 9 de 24: diffInDays
Las 24 funciones antes de navidad
Cada día avanzamos construyendo una pequeña caja de herramientas que facilita tareas comunes en nuestros proyectos. Ayer exploramos cómo sumar días a una fecha y hoy continuamos con una pieza esencial para cualquier lógica temporal. Comparar fechas es parte de muchos flujos de negocio y esta función ayuda a hacerlo de forma segura y clara.
diffInDays
La función diffInDays calcula la diferencia en días entre dos fechas. Es útil cuando necesitamos saber cuántos días han pasado entre dos eventos o cuándo falta para una fecha específica. A diferencia de restar timestamps manualmente, esta función encapsula la conversión a días y maneja objetos Date, cadenas e incluso timestamps numéricos. Además, permite obtener el valor absoluto para casos donde el orden de las fechas no importa.
Código de la función
/**
* Calcula la diferencia en días entre dos fechas (date2 - date1).
* Retorna un número positivo si date2 es posterior, negativo si es anterior.
* @param {Date|string|number} date1 Fecha inicial.
* @param {Date|string|number} date2 Fecha final.
* @param {object} [options]
* @param {boolean} [options.absolute=false] Si true, retorna valor absoluto.
* @returns {number} Diferencia en días (puede incluir fracciones).
*/
export function diffInDays(date1, date2, options = {}) {
const { absolute = false } = options;
const d1 = date1 instanceof Date ? date1 : new Date(date1);
const d2 = date2 instanceof Date ? date2 : new Date(date2);
if (isNaN(d1.getTime()) || isNaN(d2.getTime())) throw new Error('Fecha inválida');
const MS_PER_DAY = 1000 * 60 * 60 * 24;
const diff = (d2.getTime() - d1.getTime()) / MS_PER_DAY;
return absolute ? Math.abs(diff) : diff;
}
Cómo usarla
Caso básico
diffInDays('2024-01-01', '2024-01-10');
// 9
Diferencia negativa cuando la segunda fecha es anterior
diffInDays('2024-01-10', '2024-01-01');
// -9
Obtener siempre un valor positivo
diffInDays('2024-01-10', '2024-01-01', { absolute: true });
// 9
Con fechas como objetos Date
const inicio = new Date(2024, 0, 1);
const fin = new Date(2024, 0, 15);
diffInDays(inicio, fin);
// 14
Con esta función seguimos fortaleciendo el conjunto de utilidades que harán más ágil nuestro desarrollo. Mañana sumaremos otra pieza para continuar armando este calendario de herramientas pensado para acompañarte en tus proyectos.
Compartir:
¿Te gustó este artículo? Apoya mi trabajo y ayúdame a seguir creando contenido.
Cómprame un café