<script>
function generateCalendar(year, month) {
const daysInMonth = getDaysInMonth(year, month); // 获取当月天数
const firstDayOfMonth = new Date(year, month - 1, 1).getDay(); // 获取当月第一天是星期几
const daysInPrevMonth = getDaysInMonth(year, month - 1); // 获取上月天数
let calendarArr = []
// 生成上月剩余号数
let prevMonthDays = []; // 上月剩余天数
if (firstDayOfMonth !== 1) {
if (firstDayOfMonth === 0) {
for (let i = 0; i < 6; i++) {
prevMonthDays.push(daysInPrevMonth - i);
}
} else {
for (let i = 0; i < firstDayOfMonth - 1; i++) {
prevMonthDays.push(daysInPrevMonth - i);
}
}
}
prevMonthDays = prevMonthDays.reverse();
// 生成当月号数
let newMonthDays = [];
for (let i = 1; i <= daysInMonth; i++) {
newMonthDays.push(i);
}
// 生成下月号数
let nextMonthDays = []; // 下月剩余天数
for (let i = 1; i <= 42 - (prevMonthDays.length + newMonthDays.length); i++) {
nextMonthDays.push(i);
}
// 将号数处理为对象
let prevMonthObjDays = prevMonthDays.map(item => {
let obj = {
day: item,
year: year,
month: month - 1,
date: year + '-' + (month - 1).toString().padStart(2, '0') + '-' + item.toString().padStart(2, '0')
};
return obj;
});
let newMonthObjDays = newMonthDays.map(item => {
let obj = {
day: item,
year: year,
month: month,
date: year + '-' + month.toString().padStart(2, '0') + '-' + item.toString().padStart(2, '0')
};
return obj;
});
let nextMonthObjDays = nextMonthDays.map(item => {
let obj = {
day: item,
year: year,
month: month + 1,
date: year + '-' + (month + 1).toString().padStart(2, '0') + '-' + item.toString().padStart(2, '0')
};
return obj;
});
let daysObjArr = [...prevMonthObjDays, ...newMonthObjDays, ...nextMonthObjDays];
let arr = [];
for (let i = 0; i <= daysObjArr.length; i++) {
if (i === 0) {
arr.push(daysObjArr[i]);
} else if (i % 7 === 0) {
calendarArr.push(arr);
arr = [];
arr.push(daysObjArr[i]);
} else {
arr.push(daysObjArr[i]);
}
}
function getDaysInMonth(year, month) {
return new Date(year, month, 0).getDate();
}
return calendarArr;
}
console.log(generateCalendar(2024, 9))
</script>
js制作日历获取当月数据信息
于 2024-10-12 17:05:34 首次发布