¿Cómo calcular el número de días entre dos fechas? [duplicar]
Estoy calculando el número de días entre las fechas "desde" y "hasta". Por ejemplo, si la fecha desde es 13/04/2010 y la fecha hasta es 15/04/2010, el resultado debe ser
¿Cómo obtengo el resultado usando JavaScript?
const oneDay = 24 * 60 * 60 * 1000; // hours*minutes*seconds*milliseconds
const firstDate = new Date(2008, 1, 12);
const secondDate = new Date(2008, 1, 22);
const diffDays = Math.round(Math.abs((firstDate - secondDate) / oneDay));
Aquí hay una función que hace esto:
function days_between(date1, date2) {
// The number of milliseconds in one day
const ONE_DAY = 1000 * 60 * 60 * 24;
// Calculate the difference in milliseconds
const differenceMs = Math.abs(date1 - date2);
// Convert back to days and return
return Math.round(differenceMs / ONE_DAY);
}
Esto es lo que uso. Si simplemente resta las fechas, no funcionará dentro del límite del horario de verano (por ejemplo, del 1 de abril al 30 de abril o del 1 de octubre al 31 de octubre). Esto reduce todas las horas para garantizar que tenga un día y elimina cualquier problema de horario de verano mediante el uso de UTC.
var nDays = ( Date.UTC(EndDate.getFullYear(), EndDate.getMonth(), EndDate.getDate()) -
Date.UTC(StartDate.getFullYear(), StartDate.getMonth(), StartDate.getDate())) / 86400000;
como una función:
function DaysBetween(StartDate, EndDate) {
// The number of milliseconds in all UTC days (no DST)
const oneDay = 1000 * 60 * 60 * 24;
// A day in UTC always lasts 24 hours (unlike in other time formats)
const start = Date.UTC(EndDate.getFullYear(), EndDate.getMonth(), EndDate.getDate());
const end = Date.UTC(StartDate.getFullYear(), StartDate.getMonth(), StartDate.getDate());
// so it's safe to divide by 24 hours
return (start - end) / oneDay;
}
Aquí está mi implementación:
function daysBetween(one, another) {
return Math.round(Math.abs((+one) - (+another))/8.64e7);
}
+<date>
hace el tipo de coerción a la representación de números enteros y tiene el mismo efecto que <date>.getTime()
y 8.64e7
es el número de milisegundos en un día.