¿Cómo calcular el número de días entre dos fechas? [duplicar]

Resuelto udaya asked hace 14 años • 7 respuestas
  1. 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

  2. ¿Cómo obtengo el resultado usando JavaScript?

udaya avatar Apr 13 '10 13:04 udaya
Aceptado
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));
MaxVT avatar Apr 13 '2010 06:04 MaxVT

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);

}
Darin Dimitrov avatar Apr 13 '2010 06:04 Darin Dimitrov

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;
}
rmcmullan avatar Jul 18 '2013 15:07 rmcmullan

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.64e7es el número de milisegundos en un día.

Andrei Borisovich avatar Apr 25 '2014 07:04 Andrei Borisovich