Entonces, necesito recopilar todos los días de la semana actual, de domingo a sábado, comencé a crear un código que toma la fecha real y crea un ciclo for para insertar cada día en una matriz, el problema es que en semanas como esta ( que comienza en un mes y termina en otro) el código no funcionará.
Aquí está el código:
const createWeek = async() => { const d = new Date(); let month = d.getMonth() + 1; let year = d.getFullYear(); const inicialDate = d.getDate() - d.getDay(); const lastDate = inicialDate + 6; console.log(d, 'current date') let firstDay = new Date(d.setDate(inicialDate)); let lastDay = new Date(d.setDate(lastDate)) let week = [] for (let i = firstDay.getDate(); i <= lastDay.getDate(); i++) { week.push(`${i.toLocaleString().length <= 1 ? "0" + i : i}${month.toLocaleString().length <= 1 ? "0" + month : month}${year}`); } return week; }
Así que sé que el problema se debe a que en mi ciclo for el primer día de la semana es más grande que el último día de la semana, pero no sé cómo lidiar con eso. Quiero saber cuál es el mejor enfoque para esto.
Gracias por tu ayuda.
Sugeriría usar Date.setDate()
para ajustar cada día, esto también ajustará el mes correctamente.
Comenzamos obteniendo el día WeekStart, restando el resultado de currentDay.getDay() de currentDate.getDate() y usándolo como entrada para setDate().
Luego podemos usar Array.from()
para generar nuestra lista de siete días.
Sugeriría primero crear una matriz de siete fechas y luego crear una función de formato personalizada, por ejemplo, formatDate()
para este propósito. Esto nos permite separar la lógica de crear y mostrar las fechas.
function createWeek(currentDay = new Date()) { const weekStart = new Date(currentDay); weekStart.setDate(currentDay.getDate() - currentDay.getDay()); return Array.from( { length: 7 }, (v,k) => { const dt = new Date(weekStart); dt.setDate(weekStart.getDate() + k); return dt; }) } function formatDate(date) { return [date.getDate(), date.getMonth() + 1, date.getFullYear()] .map(n => (n + '').padStart(2, '0')) .join(''); } const weekDates = createWeek(); console.log('Formatted dates:') for(let date of weekDates) { console.log(formatDate(date)); }
.as-console-wrapper { max-height: 100% !important; }