如何制作一个 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; }
所以,我需要收集当前一周的所有天数,从星期天到星期六,我开始编写一个代码来获取实际日期并制作一个 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; }