Tengo un problema para obtener la fecha de la semana actual en javascript. Escribí el siguiente código para obtener la fecha de la semana actual. Funcionaba bien, pero parece que a veces devuelve la fecha de la semana siguiente. No pude entender dónde está el problema. Cualquier ayuda sería apreciada.
Este es mi código:
let curr = new Date(); let week = []; for (let i = 1; i <= 7; i++) { let first = curr.getDate() - curr.getDay() + i; let day = new Date(curr.setDate(first)).toISOString().slice(0, 10); week.push(day); }; console.log(week)La salida:
['2022-06-13', '2022-06-14', '2022-06-15', '2022-06-16', '2022-06-17', '2022-06-18', '2022-06-19'] pero la fecha de hoy es el 6/12/2022 , pero la fecha anterior comenzó el 13/06/2022
Fuente: aquí
Cuando haces +i estás sumando números del 1 al 7 a tu first variable. Ahora, dado que la semana comienza desde el Sunday=0 , no necesita agregar una compensación.
Simplemente iterar el bucle de 0 a 6 :
let curr = new Date(new Date().getTime() - (7 * 24 * 60 * 60 * 1000)); let week = []; for (let i = 0; i < 7; i++) { let first = curr.getDate() - curr.getDay() + i; let day = new Date(curr.setDate(first)).toISOString().slice(0, 10); week.push(day); }; console.log(week) [Editar] : si desea obtener desde hace 7 días, puede cambiar la forma en que inicializa su variable curr .
De esto :
let curr = new Date();a esto:
let curr = new Date(new Date().getTime() - (7 * 24 * 60 * 60 * 1000)); Utilizo el método getTime() para obtener la época de la fecha de hoy y restar exactamente los milisegundos transcurridos en 7 días (o 1 semana).
Si entiendo su pregunta correctamente, debe tener en cuenta cuándo el día actual es domingo para obtener el primer día de la semana actual (lunes).
let curr = new Date(); let week = []; for (let i = 1; i <= 7; i++) { let first = curr.getDate() - curr.getDay() + i; if (curr.getDay() === 0){ first = curr.getDate() - 6; } let day = new Date(curr.setDate(first)).toISOString().slice(0, 10); week.push(day); }; console.log(week)Inicie el ciclo for desde 0
Al igual que
let curr = new Date(); let week = []; for (let i = 0; i < 7; i++) { let first = curr.getDate() - curr.getDay() + I; let day = new Date(curr.setDate(first)).toISOString().slice(0, 10); week.push(day); }; console.log(week)Recuerde, si comienza desde 1 y agrega 1 a la fecha actual, regresará mañana, y si agrega 0 a hoy, regresará a esta fecha.