/**
* 打印指定年月的日历
* @param {number} year - 年份,如2025
* @param {number} month - 月份,1-12
*/
function printCalendar(year, month) {
// 获取当月第一天对象(注意月份参数是0-11,所以mont-1)
const firstDay = new Date(year, month - 1, 1);
// 获取当月最后一天对象(将month设为下个月,day设为0即可得到上个月最后一天)
const lastDay = new Date(year, month, 0);
// 打印日历标题(年、月)
console.log(` ${year}年${month}月`);
// 打印星期标题
console.log("日 一 二 三 四 五 六");
// 用于构建每一行的字符串
let line = "";
// 填充首行空白(当月1号是星期几,前面就空几格)
for (let i = 0; i < firstDay.getDay(); i++) {
// 每个日期占3个字符位置(2位数字+1空格)
line += " ";
}
// 循环打印每一天
for (let day = 1; day <= lastDay.getDate(); day++) {
// 日期小于10时前面补空格对齐,如" 1",否则直接使用如"10"
line += (day < 10 ? " " + day : day) + " ";
// 判断是否该换行:当日期+首日星期数能被7整除时换行,或是最后一天时换行
if ((firstDay.getDay() + day) % 7 === 0 || day === lastDay.getDate()) {
// 打印当前行
console.log(line);
// 重置行字符串
line = "";
}
}
}
// 示例:打印2025年5月的日历
printCalendar(2025, 5);
执行这段代码将在控制台输出类似这样的效果:
2025年5月
日 一 二 三 四 五 六
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
| 代码 | 含义 |
|---|---|
new Date(2025, 4, 1) | 2025年5月1日 |
new Date(2025, 5, 0) | 2025年5月31日(6月的前一天) |