一、首先要获得年月
var oldDate = prompt("请输入年月用空格隔开")
为了方便后面计算月份的第一天是星期几,需要用到Date对象所以要手动添加默认1日
通过字符串分割 或者 直接转换为Date对象通过函数多种方法获得年月
但是需要使用Date对象的函数所有此时直接格式化将String对象转换为Date对象且保留了String对象
oldDate += "/1"
var getweek = oldDate
oldDate = oldDate.replace(" ", "/")
oldDate = oldDate.replace(" ", "/")
oldDate = oldDate.replace(" ", "/")
var date = new Date(oldDate)
二、输出日历头部
输出年月和日历固定的头部
document.write("   " + date.getFullYear() + "年" + (parseInt(date.getMonth()) + 1) + "月" + "<br/>")
document.write("日 一  二  三 四  五 六<br/>")
weekDay = new Date(getweek).getDay()
三、处理特殊月和最大月份天数问题
二月的闰年和平年问题
function isPrimeYear(year) {
//闰年的判断公式为 能被4整除但不能被100整除 或者 可以被四百整除
if (!(year % 400) || !(year % 4) && year % 100) {
return true;
}
return false;
}
最大月份问题
直接使用数组写定月份如果是闰年二月那么变为29天
getMonthDay = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
if (isPrimeYear(date.getFullYear())) {
getMonthDay[1] = 29
}
else{
getMonthDay[1] = 28
}
四、处理首月一日占位和周六在末尾还有换行问题
//处理某月的第一天占位问题
if (weekDay % 7 != 0) {
for (var i = 0; i < weekDay; i++) {
document.write("     ")
//console.log("你好")
}
weekDay += 1
}
//console.log(weekDay)
//处理换行问题和个位数占位不齐问题
for (var i = 1; i <= getMonthDay[date.getMonth()]; i++) {
document.write(i + "\t")
if (i < 10) {
document.write("  ")
}
//处理周日占位问题
if (weekDay % 7 == 0) {
if (i == 1) {
weekDay += 2
console.log(weekDay)
continue
}
document.write("<br/>")
}
weekDay++
}
五、完整函数代码
function isPrimeYear(year) {
//闰年的判断公式为 能被4整除但不能被100整除 或者 可以被四百整除
if (!(year % 400) || !(year % 4) && year % 100) {
return true;
}
return false;
}
//31 30 31 30 31 31 30 31 30 31 28 31
function getCalendar(oldDate) {
var date = new Date(oldDate)
document.write("   " + date.getFullYear() + "年" + (parseInt(date.getMonth()) + 1) + "月" + "<br/>")
document.write("日 一  二  三 四  五 六<br/>")
weekDay = new Date(getweek).getDay()
getMonthDay = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
if (isPrimeYear(date.getFullYear())) {
getMonthDay[1] = 29
}else{
getMonthDay[1] = 28
}
// console.log(getMonthDay)
//console.log(weekDay)
if (weekDay % 7 != 0) {
for (var i = 0; i < weekDay; i++) {
document.write("     ")
//console.log("你好")
}
weekDay += 1
}
//console.log(weekDay)
for (var i = 1; i <= getMonthDay[date.getMonth()]; i++) {
document.write(i + "\t")
if (i < 10) {
document.write("  ")
}
if (weekDay % 7 == 0) {
if (i == 1) {
weekDay += 2
console.log(weekDay)
continue
}
document.write("<br/>")
}
weekDay++
}
}
var oldDate = prompt("请输入年月用空格隔开")
oldDate += "/1"
var getweek = oldDate
oldDate = oldDate.replace(" ", "/")
oldDate = oldDate.replace(" ", "/")
oldDate = oldDate.replace(" ", "/")
getCalendar(oldDate)