Javascript-通过输入年月输出该月日历

一、首先要获得年月

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("&nbsp&nbsp&nbsp" + date.getFullYear() + "年" + (parseInt(date.getMonth()) + 1) + "月" + "<br/>")

                document.write("日 一&nbsp 二&nbsp 三 四&nbsp 五 六<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("&nbsp&nbsp&nbsp&nbsp&nbsp")

                        //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("&nbsp&nbsp")

                    }

                   //处理周日占位问题

                    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("&nbsp&nbsp&nbsp" + date.getFullYear() + "年" + (parseInt(date.getMonth()) + 1) + "月" + "<br/>")

                document.write("日 一&nbsp 二&nbsp 三 四&nbsp 五 六<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("&nbsp&nbsp&nbsp&nbsp&nbsp")

                        //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("&nbsp&nbsp")

                    }

                   

                    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)

  • 12
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
以下是一个简单的JavaScript函数,用于创建一个指定日历: ```javascript function createCalendar(year, month) { // 获取指定的第天 var firstDay = new Date(year, month - 1, 1); // 获取指定的最后一天 var lastDay = new Date(year, month, 0); // 创建一个表格元素 var table = document.createElement('table'); // 创建表格的表头 var thead = document.createElement('thead'); var tr = document.createElement('tr'); var daysOfWeek = ['日', '一', '二', '三', '四', '五', '六']; for (var i = 0; i < daysOfWeek.length; i++) { var th = document.createElement('th'); th.textContent = daysOfWeek[i]; tr.appendChild(th); } thead.appendChild(tr); table.appendChild(thead); // 创建表格的表身 var tbody = document.createElement('tbody'); var tr = document.createElement('tr'); var dayOfWeek = firstDay.getDay(); for (var i = 0; i < dayOfWeek; i++) { var td = document.createElement('td'); tr.appendChild(td); } var currentDate = 1; while (currentDate <= lastDay.getDate()) { if (dayOfWeek == 7) { tbody.appendChild(tr); tr = document.createElement('tr'); dayOfWeek = 0; } var td = document.createElement('td'); td.textContent = currentDate; tr.appendChild(td); currentDate++; dayOfWeek++; } tbody.appendChild(tr); table.appendChild(tbody); // 返回表格元素 return table; } ``` 使用该函数,可以创建一个指定日历,并将其添加到DOM中: ```javascript var calendar = createCalendar(2021, 8); document.body.appendChild(calendar); ``` 上面的代码将创建一个20218日历,并将其添加到文档的body元素中。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值