Estoy escribiendo una función en NodeJs en la que obtener 2 fechas devuelve una matriz con todas las fechas en el rango. En cambio, obtengo una matriz que se agrega en la misma fecha y se elimina cada vez.
Por ejemplo: Obtener la fecha de inicio 11/01/2026 y la fecha de finalización 11/03/2026 debería devolver [11/01/2026, 11/02/2026, 11/03/2026] ahora lo hace: [11/01/2026] 2026],[11/02/2026, 11/02/2026],[11/03/2026, 11/03/2026, 11/03/2026]
Intenté salir del formato, pero lo convierto en una cadena. Intenté tener 2 matrices y usar el operador de distribución, pero no tuve éxito.
Aquí está mi código:
const dateList = ({ start, end }) => { let now = moment(start); const end = moment(end); let dates = []; while (now.format('YYYY-MM-DD') <= end.format('YYYY-MM-DD')) { dates.push(now); now = now.add(1, 'days'); } return dates; } su variable now es una instancia de fecha de momento, por lo que si la presiona en su matriz y establece su día en +1, la instancia en su matriz también obtendrá este cambio porque es la misma instancia. Debe enviar un clon de su instancia de momento.
const dateList = ({ start, end }) => { let now = moment(start); const end = moment(end); let dates = []; while (now.format('YYYY-MM-DD') <= end.format('YYYY-MM-DD')) { dates.push(now.clone()); now = now.add(1, 'days'); } return dates; } y puede usar la consulta de momento para probar si el end es después de now .
while(now.format('YYYY-MM-DD') <= end.format('YYYY-MM-DD')) => while(now.isSameOrBefore(end))
const dateList = ({ start, end }) => { let now = moment(start); const end = moment(end); let dates = []; while (now.isSameOrBefore(end)) { dates.push(now.clone()); now = now.add(1, 'days'); } return dates; } const dateList = ({ start, end }) => { let now = moment.utc(start); end = moment.utc(end); let dates = []; while (now.isValid() && end.isValid() && now.isSameOrBefore(end, 'day') /* end day inclusive */) { dates.push(now); now = moment(now).add(1, 'days'); // add 1 day on a new instance } return dates; } console.log(dateList({start: '2026-05-12', end: '2026-05-14'})) <script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.29.1/moment.min.js"></script>