JS DOM对象打印日历

本文介绍了一个使用HTML、CSS和JavaScript实现的日历生成器。该生成器可以根据用户选择的年份和月份动态生成对应的日历表格,展示了如何通过简单的前端技术实现复杂的日期逻辑。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title></title>
        <style type="text/css">
            *{margin: 0px;padding: 0px;}
            #container{width: 400px;height: 190px; border: 1px solid royalblue;margin: 0px auto;}
            #container>div:first-child{width: 130px; margin: 0px auto;flex;}
            #tbcal{border-collapse: collapse; width: 100%;}
            #tbcal tr th,#tbcal tr td{border: 1px solid #ccc;}
        </style>

        <script type="text/javascript">
            window.onload=function(){
                initial();
                document.getElementById("selyear").onchange=show;
                document.getElementById("selmonth").onchange=show;
            }
            //显示日历
            function show(){
                var year=parseInt(document.getElementById("selyear").value);
                var month=parseInt(document.getElementById("selmonth").value);
                var days=getLastDay(month);
                var dt=new Date();
                dt.setFullYear(year);
                dt.setMonth(month-1);
                dt.setDate(1);
                var week=dt.getDay();
                var day01=0;
                var table=document.getElementById("tbcal");
                while(table.rows.length>1){
                    table.deleteRow(1);
                }
                //根据月天数与月一号星期打印日历
                for (var i=0;i<7;i++) {
                    var row=table.insertRow(i+1);
                    if(i==0&&week!=0){
                        for (var j=0;j<7;j++) {
                            if(week>j){
                                var cell=row.insertCell(j);
                                cell.innerHTML=" ";
                            }else{
                                day01=j-week+1;
                                var cell=row.insertCell(j);
                                cell.innerHTML=day01;
                            }                           
                        }
                    }else{
                            for (var j=0;j<7;j++) {
                                if(day01<days){
                                    day01++;
                                    var cell=row.insertCell(j);
                                    cell.innerHTML=day01;
                                }else{
                                    var cell=row.insertCell(j);                                 
                                        cell.innerHTML=" ";
                                }
                            }
                        }   
                }
            }
            //根据月份计算次月的天数(此方法无法分辨闰月)
            function getLastDay(month){
                var dt=new Date();
                dt.setMonth(month);
                dt.setDate(0);
                return dt.getDate();
            }

            function initial(){
                for (var i=1970;i<=2050;i++) {
                    var option=document.createElement("option");
                    option.text=i;
                    document.getElementById("selyear").add(option);
                }
                for (var i=1;i<=12;i++) {
                    var option=document.createElement("option");
                    option.text=i;
                    document.getElementById("selmonth").add(option);
                }
            }
        </script>

    </head>
    <body>
        <div id="container">
            <div>
            <select id="selyear"></select><select id="selmonth"></select></div>
            <div>
                <table id="tbcal">
                    <tr> <th></th><th></th><th></th><th></th><th></th><th></th> <th></th></tr>
                </table>
            </div>
        </div>
    </body>
</html>

验证截图

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值