Tengo problemas con una función que se supone que muestra fechas entre dos fechas
He identificado el error y depende de la hora de la fecha de inicio.
function getDatesInRange(startDate, endDate) { const date = new Date(startDate.getTime()); const dates = []; while (date <= endDate) { dates.push(new Date(date)); date.setDate(date.getDate() + 1); } return dates; } const d1 = new Date(doc.travel_start); const d2 = new Date(doc.travel_end); getDatesInRange(d1, d2)travel_end: "2022-03-23T20:00:57.118Z" travel_start: "2022-03-20T05:59:57.118Z",
Salida correcta: [ 2022-03-20T05:59:57.118Z, 2022-03-21T05:59:57.118Z, 2022-03-22T05:59:57.118Z, 2022-03-23T05:59:57.118Z ]
Si cambio la marca de tiempo de travel_start a la hora 23, falta la última fecha de mi matriz [ 2022-03-20T21:59:57.118Z, 2022-03-21T21:59:57.118Z, 2022-03-22T21:59:57.118 Z ]
He intentado eliminar la marca de tiempo de travel_start por .setHours(0,0,0,0) sin éxito.
Si no se opone al uso de bibliotecas externas, date-fns tiene muchas funciones útiles, incluido lo que está buscando hacer.
ejemplo:
import { eachDayOfInterval } from "date-fns"; function getDatesInRange(startDate, endDate) { return eachDayOfInterval({ start: new Date(startDate), end: new Date(endDate) }) } getDatesInRange(d1, d2)De lo contrario, la respuesta de Shusman parece tener sentido.
Estás en la dirección correcta
setHours podría tener un problema con la zona horaria intente usar setUTCHours ;
y restablecer las fechas de inicio y finalización antes de cualquier cálculo
probar:
function getDatesInRange(startDate, endDate) { const start = new Date(new Date(startDate).setUTCHours(0, 0, 0, 0)); const end = new Date(new Date(endDate).setUTCHours(0, 0, 0, 0)); const date = new Date(start.getTime()); const dates = []; while (date <= end) { dates.push(new Date(date)); date.setDate(date.getDate() + 1); } return dates; } const travel_start = "2022-03-20T05:59:57.118Z"; const travel_start2 ="2022-03-20T23:59:57.118Z"; const travel_end = "2022-03-23T20:00:57.118Z"; const res1 = getDatesInRange(travel_start, travel_end); const res2 = getDatesInRange(travel_start2,travel_end); console.log('res1', res1) console.log('res2', res2)