如何制作一个 for 循环来收集几个月之间一周的每一天?

How to make a for loop to gather every day of a week that is between months?

所以,我需要收集当前一周的所有天数,从星期天到星期六,我开始编写一个代码来获取实际日期并制作一个 for 循环以将每一天推送到一个数组中,问题是像这样的几周(从一个月开始到另一个月结束)代码将无法正常工作。

代码如下:

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

所以我知道问题是因为在我的 for 循环中,一周的第一天比一周的最后一天大,但我不知道如何处理。我想知道最好的方法是什么。

感谢您的帮助。

我建议每天使用 Date.setDate() 调整,这也会正确调整月份。

我们首先从 currentDate.getDate() 中减去 currentDay.getDay() 的结果并将其用作 setDate() 的输入。

然后我们可以使用 Array.from() 生成我们的 7 天列表。

我建议首先创建一个包含七个日期的数组,然后创建一个自定义格式设置函数,例如formatDate() 为此目的。这允许我们分离创建和显示日期的逻辑。

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