js 简单日历

源地址:https://jingyan.baidu.com/article/546ae185fa4f721149f28cbf.htm

文件:index.htm

<!DOCTYPE html>

<head>
    <meta charset="utf8">
    <title>日历例子</title>
    <script src="calendar.js"></script>
</head>

<body>
    <div id="main"><!-- 日历 --></div>
    <script>
        ‘use strict‘;
        {
            let rili = new Calendar({
                container: ‘main‘,
            });
            rili.show(11);  // 12 月份
        }
    </script>

</body>

</html>

文件:calendar.js

‘use strict‘;
class Calendar {

    /**
     * 构造函数
     * @param {string} containerId 容器Id
     * @param {number} year 年份
     */
    constructor({ container, year = new Date().getFullYear() }) {
        this.year = year;
        this.container = document.getElementById(container);
    }

    /**
     * 日历数据
     * @param {number} month 月份
     * @returns {array} 6行7列 日期  0~6 表示:星期天 ~ 星期六
     */
    data(month) {
        let week = [‘星期日‘, ‘星期一‘, ‘星期二‘, ‘星期三‘, ‘星期四‘, ‘星期五‘, ‘星期六‘], arr = [];
        let date = new Date(this.year, month), days = this.getDays(month);
        for (let x = 0, day = 1; x < 6; x++) {
            arr[x] = new Array(7).fill(null);
            for (let y = x ? 0 : date.getDay(); y < 7 && day <= days; y++ , day++) {
                arr[x][y] = day;
            }
        }
        arr.unshift(week)
        return arr;
    }

    /**
     * 显示日历
     * @param {number} month 月份
     */
    show(month) {
        let data = this.data(month);
        let table = document.createElement(‘table‘), tr, td, text;
        table.border = 1;
        for (let x = 0; x < data.length; x++) {
            tr = document.createElement(‘tr‘);
            table.appendChild(tr);
            for (let y = 0; y < data[x].length; y++) {
                td = document.createElement(‘td‘);
                td.height = 24;
                text = document.createTextNode(data[x][y] || " ");   // 创建文本节点
                td.appendChild(text);
                tr.appendChild(td);
            }
        }
        this.container.appendChild(table);
    }

    /**
     * 当月天数
     * @param {number} num  月份
     * @returns {number} 天数
     */
    getDays(num) {
        const month = [31, this.isLeapYear() ? 29 : 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];
        return month[num];
    }

    /**
     * 是否润年
     * @returns {bool}
     */
    isLeapYear() {
        let year = this.year;
        return ((year % 4 === 0 && year % 100 !== 0) || (year % 400 === 0)) ? true : false;
    }
}

原文地址:https://www.cnblogs.com/whnba/p/10158699.html

时间: 2025-01-12 09:28:53

js 简单日历的相关文章

js超简单日历

用原生js写了一个超级简单的日历.当做是练习js中的Date类型. 思路: 获取某个日期,根据年份计算出每个月的天数. 利用Date中的getDay()知道该月份的第一天为星期几. 循环创建表格,显示日历. html 1 <!DOCTYPE html> 2 <html> 3 <head> 4 <title>JS简单日历</title> 5 <meta http-equiv="Content-type" content=&

js编写当天简单日历

之前一直很想用javascript写一个日历,但是因为完全没有好的思路, 所以迟迟没有尝试.最近在网上刚好看到用javascript编写的简单日历的例子,代码量虽然不大, 但是我觉得很好地阐述了js日历的实现原理.自己也尝试着做了一下,收获蛮大,掌握了基本的实现原理后,再想增加更多的功能,完全就可以自由发挥了,先在这里分享一下吧,有兴趣的可以试试! 一.表格行数问题 既然要显示日期表格的话,首先得知道这个表格有多少行多少列,列数是已经确定的,从星期天(日历上第1列是星期天)到星期六一共7列.要解

一个js简单的日历显示效果的函数

用一个函数简单的实现一个月份的日历,效果如下: 这个日历效果有高亮显示,我实现的思维比较简单. 我把上面的日历效果用表格table生成,分成两个部分. 第一个部分:就是前面的第一排,我用一行<tr></tr>显示,这一部分表示的上个月份留下来的日期和这个月份的日期的混合日期: 第二部分:就是剩下的所有排,这里我用五行<tr></tr>显示,这一部分表示的是这个月份和下个月份的日期的混合日期. 这里为什么要用6行<tr></tr>来显示

JavaScript实现简单日历

页面代码: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="co

js 面向对象日历实现原理详解

对于前端开发来说,日历空间在网站里应用的很多,比如:填写表单时,是选取一下事件了--等等.下面就来分析一下怎么用js来写一个自己万年历. 在没有开始之前,我们是先弄明白是什么原理,要通过几个步骤来实现. 第一,我们的知道某一个月的某第一天是星期几. 第二,我们得知道某一个月有一共有几天, 只要有了这两部就可以循环出来了,下面看一下代码 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http

zepto-selector.js简单分析

zepto 的selector模块是对jquery扩充选择器(jquery-selector-extensions)的部分实现.比如这样的选择方法:$('div:first') 和 el.is(':visible'). 下面是原代码,简单的写了一些注释- ;(function($){ var zepto = $.zepto, oldQsa = zepto.qsa, oldMatches = zepto.matches /* * 检察一个元素是否可见.除了要判断display是否是none之外,还

Node.js简单介绍

Node.js是一个能够让javascript执行在server上的平台,既是语言又是平台. Node.js是一个实时web应用程序的平台. Node.js有强大的包管理器npm,故node相关软件安装用npm命令安装. Node.js简单介绍,布布扣,bubuko.com

JS实现日历

7.2-- 以前写特效都用jquery,js使用还不熟的很,最近又在看<javascript权威指南>,正好公司的项目有个日历签到的功能,就先用js写个日历控件试试,目前还只实现了基本的功能,先贴代码: html 1 <!DOCTYPE html> 2 <html> 3 <head> 4 <title></title> 5 <meta charset="utf-8"> 6 <link rel=&q

JS简单的倒计时(代码优化)

倒计时网上一大堆,所以也没有什么好说的,支持:1.年,月,日,天,时分秒等倒计时. JS代码如下: /* * js简单的倒计时 * @param {date,obj} 日期 对象格式 */ function CountDown(date,obj) { var self = this; self.date = date; self.obj = obj; self._init(); }; $.extend(CountDown.prototype,{ _init: function(){ var se