JS写一个简单日历

JS写一个日历,配合jQuery操作DOM

<!DOCTYPE html>
<html>

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Calendar</title>
    <style>
        * {
            margin: 0;
            padding: 0;
            list-style: none;
        }

        header {
            text-align: center;
            line-height: 40px;
        }

        main {
            margin-top: 100px;
        }

        main div {
            margin: 20px;
            text-align: center;
        }

        .full-date {
            margin: 0 20px;
            vertical-align: middle;
        }

        .left,
        .right {
            border: 1px solid #add8e6;
            padding: 5px 10px;
        }

        ul {
            margin: 0 40px 10px;
        }

        ul li {
            display: inline-block;
            width: 40px;
            text-align: center;
            line-height: 40px;
        }

        .title li {
            width: 35px;
        }
    </style>
</head>

<body>
    <header>
        简单日历
    </header>
    <main>
        <div>
            <span class="left"><</span>
            <span class="full-date">2019/1/1</span>
            <span class="right">></span>
        </div>
        <ul class="title">
            <li>日</li>
            <li>一</li>
            <li>二</li>
            <li>三</li>
            <li>四</li>
            <li>五</li>
            <li>六</li>
        </ul>
        <section id="date"></section>
    </main>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.0/jquery.js"></script>
    <script>
        const Calendar = { // 实现日历方法
            date: [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31],
            now: new Date(),
            result: [],
            need: false,
            init(needOther) {
                this.result = [];
                this.need = needOther;
                let data = [],
                    temp = [];
                if (this.leapYear(this.now)) { // 根据是否是闰年修改日期数组
                    this.date[1] = 29;
                } else {
                    this.date[1] = 28;
                }
                for (let i = 1; i <= this.date[this.now.getMonth()]; i++) { // 添加本月日期
                    data.push(i);
                }
                if (this.need) { // 是否需要其他日期
                    for (let i = 1; i <= this.getFirstWeek(this.now); i++) { // 添加上月日期
                        let num = 0;
                        if (this.now.getMonth() === 0) {
                            num = this.date[11];
                        } else {
                            num = this.date[this.now.getMonth() - 1];
                        }
                        data.unshift(num - i + 1);
                    }
                    for (let i = 1;; i++) { // 添加下月日期
                        if (data.length % 7 === 0) {
                            break;
                        } else {
                            data.push(i);
                        }
                    }
                } else {
                    for (let i = 1; i <= this.getFirstWeek(this.now); i++) { // 添加上月空白日期
                        data.unshift('');
                    }
                }
                for (let i = 1; i <= data.length; i++) { // 转换为二维数组
                    temp.push(data[i - 1]);
                    if (i % 7 === 0) {
                        this.result.push(temp);
                        temp = [];
                    }
                }
                this.result.push(temp);
            },
            getFirstWeek(time) { // 获取每月1号是星期几
                const date = new Date(time.getFullYear(), time.getMonth());
                return date.getDay();
            },
            leapYear(time) { // 判断闰年
                const year = new Date(time).getFullYear();
                return year % 400 === 0 || (year % 4 === 0 && year % 100 !== 0);
            },
            preMonth() { // 下个月
                if (this.now.getMonth() === 0) {
                    this.now = new Date(this.now.getFullYear() - 1, 11, this.now.getDate());
                } else {
                    this.now = new Date(this.now.getFullYear(), (this.now.getMonth()) - 1, this.now.getDate());
                }
                this.init(this.need);
            },
            nextMonth() { // 上个月
                if (this.now.getMonth() === 11) {
                    this.now = new Date(this.now.getFullYear() + 1, 0, this.now.getDate());
                } else {
                    this.now = new Date(this.now.getFullYear(), this.now.getMonth() + 1, this.now.getDate());
                }
                this.init(this.need);
            }
        }
        $(function () {
            Calendar.init();
            const render = () => {
                const nowDate = Calendar.now;
                $('.full-date').text(
                    `${nowDate.getFullYear()}/${nowDate.getMonth() + 1}/${nowDate.getDate()}`);
                Calendar.result.forEach(item => {
                    let html = '<ul>';
                    item.forEach(data => {
                        html += `<li>${data}</li>`;
                    });
                    html += '</ul>';
                    $('#date').append(html);
                });
            };
            render();
            $('.left').click(() => {
                $('#date').empty();
                Calendar.preMonth();
                render();
            });
            $('.right').click(() => {
                $('#date').empty();
                Calendar.nextMonth();
                render();
            });
        });
    </script>
</body>

</html>

转载于:https://www.cnblogs.com/ljwk/p/10321630.html

### 回答1: 手一个日历可能比较复杂,但可以使用 JavaScript 的 `Date` 对象和一些日期处理函数来实现。下面是一个简单的实现: ``` // 获取当前日期 var now = new Date(); // 获取当前月份 var month = now.getMonth(); // 获取当前年份 var year = now.getFullYear(); // 创建日历的表格 var table = document.createElement("table"); table.setAttribute("border", "1"); table.setAttribute("cellspacing", "0"); table.setAttribute("cellpadding", "5"); document.body.appendChild(table); // 创建表格的标题行 var caption = table.createCaption(); caption.innerHTML = year + "年" + (month + 1) + "月"; var thead = document.createElement("thead"); table.appendChild(thead); var tr = document.createElement("tr"); thead.appendChild(tr); var th = null; for (var i = 0; i < 7; i++) { th = document.createElement("th"); tr.appendChild(th); } th.innerHTML = "星期日"; th.innerHTML = "星期一"; th.innerHTML = "星期二"; th.innerHTML = "星期三"; th.innerHTML = "星期四"; th.innerHTML = "星期五"; th.innerHTML = "星期六"; // 创建表格的主体部分 var tbody = document.createElement("tbody"); table.appendChild(tbody); for (var i = 0; i < 6; i++) { tr = document.createElement("tr"); tbody.appendChild(tr); for (var j = 0; j < 7; j++) { td = document.createElement("td"); tr.appendChild(td); } } // 计算当前月份的天数 var days = new Date(year, month + 1, 0).getDate(); // 计算当前月份第一天是星期几 var firstDay = new Date(year, month, 1).getDay(); // 填充表格的主体部分 var count = 1; for (var i = 0; i < 6; i++) { for (var j = 0; j < 7; j++) { if (i === 0 && j < firstDay) { // 填充空 ### 回答2: 要手一个JS星期日历,可以按照以下步骤进行: 1. 首先创建一个HTML文件,定义一个容器元素,用于显示日历的表格。 2. 在JS文件中,使用`Date`对象获取当前日期的年份和月份信息,并存储在变量中。 3. 使用`switch`语句确定当前月份的天数,并存储在一个名为`daysInMonth`的变量中。 4. 创建一个名为`calendar`的函数,用于创建和填充日历表格。 5. 在`calendar`函数中,使用`document.createElement()`方法创建HTML元素:表格、行和单元格。 6. 在循环中,根据`daysInMonth`变量的值创建和填充表格的行和单元格。 7. 在每个单元格中,使用Date对象的`getDate()`方法获取日期,并将其填充到单元格中。 8. 使用CSS样式来美化日历表格,例如设置表格边框、单元格宽度、字体样式等。 9. 调用`calendar`函数,将日历表格添加到HTML容器元素中,以便在网页上显示出来。 以下是一个简单的示例代码: ```html <!DOCTYPE html> <html> <head> <title>JS星期日历</title> <style> table { border-collapse: collapse; } td { border: 1px solid black; width: 50px; height: 50px; text-align: center; font-weight: bold; } </style> </head> <body> <div id="calendar"></div> <script> var currentDate = new Date(); var currentYear = currentDate.getFullYear(); var currentMonth = currentDate.getMonth(); var daysInMonth; switch(currentMonth) { case 1: if((currentYear % 4 == 0 && currentYear % 100 != 0) || currentYear % 400 == 0) { daysInMonth = 29; } else { daysInMonth = 28; } break; case 3: case 5: case 8: case 10: daysInMonth = 30; break; default: daysInMonth = 31; } function calendar() { var container = document.getElementById("calendar"); var table = document.createElement("table"); for(var i = 0; i < daysInMonth/7; i++) { var row = document.createElement("tr"); for(var j = 0; j < 7; j++) { var cell = document.createElement("td"); var day = i * 7 + j + 1; if(day <= daysInMonth) { cell.innerHTML = day; } row.appendChild(cell); } table.appendChild(row); } container.appendChild(table); } calendar(); </script> </body> </html> ``` 这样,一个简单JS星期日历就完成了。运行该代码,即可在网页上显示出一个以当前月份为基础的日历表格。 ### 回答3: 要手一个星期日历,可以使用JS以下代码: ```javascript // 获取当前日期 var today = new Date(); var year = today.getFullYear(); var month = today.getMonth() + 1; var day = today.getDate(); // 获取本月的第一天和最后一天的日期 var firstDay = new Date(year, month - 1, 1); // 注意月份要减1 var lastDay = new Date(year, month, 0); // 获取上个月的最后一天即本月的最后一天 // 获取本月的天数和第一天是星期几 var numDays = lastDay.getDate(); var firstWeekday = firstDay.getDay(); // 定义一个用于存储星期的数组 var weekDays = ["日", "一", "二", "三", "四", "五", "六"]; // 打印日历头部 console.log(year + "年" + month + "月"); console.log("日 一 二 三 四 五 六"); // 打印空白占位符 for (var i = 0; i < firstWeekday; i++) { process.stdout.write(" "); } // 打印日期 for (var j = 1; j <= numDays; j++) { process.stdout.write((j < 10 ? " " : "") + j + " "); if ((firstWeekday + j) % 7 === 0) { // 每行结束换行 console.log(); } } ``` 这段代码首先获取当前日期,然后计算本月的第一天和最后一天的日期,以及本月的天数和第一天是星期几。然后使用一个存储星期的数组,打印日历头部和星期的标题。 接着打印空白占位符,保证第一天之前的日期没有显示。然后利用循环打印日期,如果每行的日期数达到7个就换行。最后得到一个简单的星期日历输出。 注意:以上代码只是一个简单的示例,可能在细节上还有待完善,比如排版、颜色等。如果需求更复杂,可以根据实际需求进行相应的修改和优化。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值