万年历、日历——拿来即用(简单易上手,操作方便)

前段时间用到了搞出来了,所以就和大家分享一下,上成果。

整个日历结构还是比较简单的,注释啥的都给大哥们整好了,都是手写的静态数据请放心食用,效果图呈上!

 

HTML代码:

<!DOCTYPE html>
<html>

<head>
    <meta charset="utf-8" />
    <title>万年历查询</title>
    <link type="text/css" rel="stylesheet" href="./css/day.css" />

</head>

<body>
    <div class="mod-calendar">
        <div class="box">
            <div class="selector">
                <span>
                    <a class="prev prev-year" href="javascript:;">&lt;</a>
                    <select class="year">
                        <script type="text/javascript">
                            for (i = 1900; i < 2101; i++) {
                                document.write('<option value="' + i + '">' + i + '年</option>');
                            }
                        </script>
                    </select>
                    <a class="next next-year" href="javascript:;">&gt;</a>
                </span>
                <span>
                    <a class="prev prev-month" href="javascript:;">&lt;</a>
                    <select class="month">
                        <script type="text/javascript">
                            for (i = 1; i < 13; i++) {
                                document.write('<option value="' + i + '">' + i + '月</option>');
                            }
                        </script>
                    </select>
                    <a class="next next-month" href="javascript:;">&gt;</a>
                </span>
                <span>
                    <select class="holiday">
                        <option value="">假日安排</option>
                    </select>
                </span>
                <a class="goback" href="javascript:;">今天</a>
            </div>
            <div class="table"></div>
        </div>
    </div>
    <script type="text/javascript" src="./js/day.js"></script>
</body>

</html>

CSS代码:

* {
    margin: 0;
    padding: 0;
}

.mod-calendar {
    position: relative;
    width: 300px;
    margin: 0 auto 30px;
    background: #57abff;
    overflow: hidden;
    *zoom: 1;
}

.mod-calendar a:hover {
    text-decoration: none;
}

.mod-calendar .box {
    border: 1px solid #57abff;
    background: #fff;
    _margin-right: 0;
    _float: left;
    _width: 404px;
}

.mod-calendar .selector {
    width: max-content;
    vertical-align: middle;
    margin-left: -1px;
    overflow: hidden;
}

.mod-calendar .selector a {
    float: left;
    position: relative;
    height: 24px;
    color: #555;
    padding: 0 3px;
    font-size: 12px;
    border: 1px solid #ebebeb;
    background: #fafafa;
    line-height: 20px;
    vertical-align: middle;
    text-decoration: none;
    _display: inline;
    _height: 20px;
    _line-height: 20px;
}

.mod-calendar .selector a:hover {
    border-color: #57abff;
    color: #57abff;
}

.mod-calendar .goback {
    _white-space: nowrap;
}

.mod-calendar .prev {
    left: 1px;
}

.mod-calendar .next {
    right: 1px;
}

.mod-calendar select {
    float: left;
    min-width: 50px;
    height: 26px;
    border: 1px solid #ebebeb;
    background: none;
    line-height: 24px;
    vertical-align: middle;
    font-size: 12px;
    color: #333;
    outline: none;
    _width: 80px;
}

.mod-calendar select.year,
.mod-calendar select.month {
    _width: 70px;
}

.mod-calendar button {
    height: 26px;
    border: 1px solid #ebebeb;
    line-height: 24px;
    background: #fafafa;
}

.mod-calendar table {
    width: 100%;
    table-layout: fixed;
    color: #666;
    border-collapse: collapse;
    border-spacing: 0;
}

.mod-calendar tr {
    border-top: 1px dotted #ebebeb;
}

.mod-calendar th,
.mod-calendar td {
    text-align: center;
}

.mod-calendar th {
    font-size: 14px;
    color: #000;
    line-height: 30px;
    font-weight: normal;
}

.mod-calendar td {
    position: relative;
    line-height: 22px;
}

.mod-calendar tbody a {
    display: block;
    width: 40px;
    padding: 2px 1px;
    border-right: 1px solid #fff;
    cursor: pointer;
    text-decoration: none;
}

.mod-calendar tbody a.active,
.mod-calendar tbody a:hover {
    padding: 1px 0;
    border: 1px solid #fc0;
    z-index: 100;
}

.mod-calendar tbody span {
    display: block;
    overflow: hidden;
    white-space: nowrap;
    text-overflow: ellipsis;
}

.mod-calendar tbody i {
    position: absolute;
    left: 2px;
    top: 0;
    line-height: 20px;
    font-style: normal;
    font-size: 12px;
}

.mod-calendar .s1 {
    font-size: 12px;
    color: #212121;
}

.mod-calendar .s2 {
    font-size: 12px;
    color: #757575;
}

.mod-calendar .holiday a {
    background: #f1f9f1;
}

.mod-calendar .holiday i {
    color: #4bae4f;
}

.mod-calendar .work a {
    background: #fef0ef;
}

.mod-calendar .work i {
    color: #f44336;
}

.mod-calendar .today a {
    background: #fc0;
}

.mod-calendar .today span {
    color: #fff;
}

.mod-calendar .disabled a {
    background: #fff;
}

.mod-calendar .disabled .s1,
.mod-calendar .disabled .s2 {
    color: #bdbdbd;
}

JS代码:

//跨浏览器DOM对象
var DOMUtil = {
    getStyle: function (node, attr) {
        return node.currentStyle ? node.currentStyle[attr] : getComputedStyle(node, 0)[attr];
    },
    getScroll: function () {           //获取滚动条的滚动距离
        var scrollPos = {};
        if (window.pageYOffset || window.pageXOffset) {
            scrollPos['top'] = window.pageYOffset;
            scrollPos['left'] = window.pageXOffset;
        } else if (document.compatMode && document.compatMode != 'BackCompat') {
            scrollPos['top'] = document.documentElement.scrollTop;
            scrollPos['left'] = document.documentElement.scrollLeft;
        } else if (document.body) {
            scrollPos['top'] = document.body.scrollTop;
            scrollPos['left'] = document.body.scrollLeft;
        }
        return scrollPos;
    },
    getClient: function () {           //获取浏览器的可视区域位置
        var l, t, w, h;
        l = document.documentElement.scrollLeft || document.body.scrollLeft;
        t = document.documentElement.scrollTop || document.body.scrollTop;
        w = document.documentElement.clientWidth;
        h = document.documentElement.clientHeight;
        return { 'left': l, 'top': t, 'width': w, 'height': h };
    },
    getNextElement: function (node) {  //获取下一个节点
        if (node.nextElementSibling) {
            return node.nextElementSibling;
        } else {
            var NextElementNode = node.nextSibling;
            while (NextElementNode.nodeValue != null) {
                NextElementNode = NextElementNode.nextSibling
            }
            return NextElementNode;
        }
    },
    getElementById: function (idName) {
        return document.getElementById(idName);
    },
    getElementsByClassName: function (className, context, tagName) { //根据class获取节点
        if (typeof context == 'string') {
            tagName = context;
            context = document;
        } else {
            context = context || document;
            tagName = tagName || '*';
        }
        if (context.getElementsByClassName) {
            return context.getElementsByClassName(className);
        }
        var nodes = context.getElementsByTagName(tagName);
        var results = [];
        for (var i = 0; i < nodes.length; i++) {
            var node = nodes[i];
            var classNames = node.className.split(' ');
            for (var j = 0; j < classNames.length; j++) {
                if (classNames[j] == className) {
                    results.push(node);
                    break;
                }
            }
        }
        return results;
    },
    addClass: function (node, classname) {          //对节点增加class
        if (!new RegExp("(^|\s+)" + classname).test(node.className)) {
            node.className = (node.className + " " + classname).replace(/^\s+|\s+$/g, '');
        }
    },
    removeClass: function (node, classname) {       //对节点删除class
        node.className = (node.className.replace(classname, "")).replace(/^\s+|\s+$/g, '');
    }
};
var getData = (function () {
    //公历农历转换
    var calendar = {
        lunarInfo: [0x04bd8, 0x04ae0, 0x0a570, 0x054d5, 0x0d260, 0x0d950, 0x16554, 0x056a0, 0x09ad0, 0x055d2,
            0x04ae0, 0x0a5b6, 0x0a4d0, 0x0d250, 0x1d255, 0x0b540, 0x0d6a0, 0x0ada2, 0x095b0, 0x14977,
            0x04970, 0x0a4b0, 0x0b4b5, 0x06a50, 0x06d40, 0x1ab54, 0x02b60, 0x09570, 0x052f2, 0x04970,
            0x06566, 0x0d4a0, 0x0ea50, 0x06e95, 0x05ad0, 0x02b60, 0x186e3, 0x092e0, 0x1c8d7, 0x0c950,
            0x0d4a0, 0x1d8a6, 0x0b550, 0x056a0, 0x1a5b4, 0x025d0, 0x092d0, 0x0d2b2, 0x0a950, 0x0b557,
            0x06ca0, 0x0b550, 0x15355, 0x04da0, 0x0a5b0, 0x14573, 0x052b0, 0x0a9a8, 0x0e950, 0x06aa0,
            0x0aea6, 0x0ab50, 0x04b60, 0x0aae4, 0x0a570, 0x05260, 0x0f263, 0x0d950, 0x05b57, 0x056a0,
            0x096d0, 0x04dd5, 0x04ad0, 0x0a4d0, 0x0d4d4, 0x0d250, 0x0d558, 0x0b540, 0x0b6a0, 0x195a6,
            0x095b0, 0x049b0, 0x0a974, 0x0a4b0, 0x0b27a, 0x06a50, 0x06d40, 0x0af46, 0x0ab60, 0x09570,
            0x04af5, 0x04970, 0x064b0, 0x074a3, 0x0ea50, 0x06b58, 0x055c0, 0x0ab60, 0x096d5, 0x092e0,
            0x0c960, 0x0d954, 0x0d4a0, 0x0da50, 0x07552, 0x056a0, 0x0abb7, 0x025d0, 0x092d0, 0x0cab5,
            0x0a950, 0x0b4a0, 0x0baa4, 0x0ad50, 0x055d9, 0x04ba0, 0x0a5b0, 0x15176, 0x052b0, 0x0a930,
            0x07954, 0x06aa0, 0x0ad50, 0x05b52, 0x04b60, 0x0a6e6, 0x0a4e0, 0x0d260, 0x0ea65, 0x0d530,
            0x05aa0, 0x076a3, 0x096d0, 0x04bd7, 0x04ad0, 0x0a4d0, 0x1d0b6, 0x0d250, 0x0d520, 0x0dd45,
            0x0b5a0, 0x056d0, 0x055b2, 0x049b0, 0x0a577, 0x0a4b0, 0x0aa50, 0x1b255, 0x06d20, 0x0ada0,
            0x14b63, 0x09370, 0x049f8, 0x04970, 0x064b0, 0x168a6, 0x0ea50, 0x06b20, 0x1a6c4, 0x0aae0,
            0x0a2e0, 0x0d2e3, 0x0c960, 0x0d557, 0x0d4a0, 0x0da50, 0x05d55, 0x056a0, 0x0a6d0, 0x055d4,
            0x052d0, 0x0a9b8, 0x0a950, 0x0b4a0, 0x0b6a6, 0x0ad50, 0x055a0, 0x0aba4, 0x0a5b0, 0x052b0,
            0x0b273, 0x06930, 0x07337, 0x06aa0, 0x0ad50, 0x14b55, 0x04b60, 0x0a570, 0x054e4, 0x0d160,
            0x0e968, 0x0d520, 0x0daa0, 0x16aa6, 0x056d0, 0x04ae0, 0x0a9d4, 0x0a2d0, 0x0d150, 0x0f252,
            0x0d520],
        solarMonth: [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31],
        Gan: ["\u7532", "\u4e59", "\u4e19", "\u4e01", "\u620a", "\u5df1", "\u5e9a", "\u8f9b", "\u58ec", "\u7678"],
        Zhi: ["\u5b50", "\u4e11", "\u5bc5", "\u536f", "\u8fb0", "\u5df3", "\u5348", "\u672a", "\u7533", "\u9149", "\u620c", "\u4ea5"],
        Animals: ["\u9f20", "\u725b", "\u864e", "\u5154", "\u9f99", "\u86c7", "\u9a6c", "\u7f8a", "\u7334", "\u9e21", "\u72d7", "\u732a"],
        solarTerm: ["\u5c0f\u5bd2", "\u5927\u5bd2", "\u7acb\u6625", "\u96e8\u6c34", "\u60ca\u86f0", "\u6625\u5206", "\u6e05\u660e", "\u8c37\u96e8", "\u7acb\u590f", "\u5c0f\u6ee1", "\u8292\u79cd", "\u590f\u81f3", "\u5c0f\u6691", "\u5927\u6691", "\u7acb\u79cb", "\u5904\u6691", "\u767d\u9732", "\u79cb\u5206", "\u5bd2\u9732", "\u971c\u964d", "\u7acb\u51ac", "\u5c0f\u96ea", "\u5927\u96ea", "\u51ac\u81f3"],
        sTermInfo: ['9778397bd097c36b0b6fc9274c91aa', '97b6b97bd19801ec9210c965cc920e', '97bcf97c3598082c95f8c965cc920f',
            '97bd0b06bdb0722c965ce1cfcc920f', 'b027097bd097c36b0b6fc9274c91aa', '97b6b97bd19801ec9210c965cc920e',
            '97bcf97c359801ec95f8c965cc920f', '97bd0b06bdb0722c965ce1cfcc920f', 'b027097bd097c36b0b6fc9274c91aa',
            '97b6b97bd19801ec9210c965cc920e', '97bcf97c359801ec95f8c965cc920f', '97bd0b06bdb0722c965ce1cfcc920f',
            'b027097bd097c36b0b6fc9274c91aa', '9778397bd19801ec9210c965cc920e', '97b6b97bd19801ec95f8c965cc920f',
            '97bd09801d98082c95f8e1cfcc920f', '97bd097bd097c36b0b6fc9210c8dc2', '9778397bd197c36c9210c9274c91aa',
            '97b6b97bd19801ec95f8c965cc920e', '97bd09801d98082c95f8e1cfcc920f', '97bd097bd097c36b0b6fc9210c8dc2',
            '9778397bd097c36c9210c9274c91aa', '97b6b97bd19801ec95f8c965cc920e', '97bcf97c3598082c95f8e1cfcc920f',
            '97bd097bd097c36b0b6fc9210c8dc2', '9778397bd097c36c9210c9274c91aa', '97b6b97bd19801ec9210c965cc920e',
            '97bcf97c3598082c95f8c965cc920f', '97bd097bd097c35b0b6fc920fb0722', '9778397bd097c36b0b6fc9274c91aa',
            '97b6b97bd19801ec9210c965cc920e', '97bcf97c3598082c95f8c965cc920f', '97bd097bd097c35b0b6fc920fb0722',
            '9778397bd097c36b0b6fc9274c91aa', '97b6b97bd19801ec9210c965cc920e', '97bcf97c359801ec95f8c965cc920f',
            '97bd097bd097c35b0b6fc920fb0722', '9778397bd097c36b0b6fc9274c91aa', '97b6b97bd19801ec9210c965cc920e',
            '97bcf97c359801ec95f8c965cc920f', '97bd097bd097c35b0b6fc920fb0722', '9778397bd097c36b0b6fc9274c91aa',
            '97b6b97bd19801ec9210c965cc920e', '97bcf97c359801ec95f8c965cc920f', '97bd097bd07f595b0b6fc920fb0722',
            '9778397bd097c36b0b6fc9210c8dc2', '9778397bd19801ec9210c9274c920e', '97b6b97bd19801ec95f8c965cc920f',
            '97bd07f5307f595b0b0bc920fb0722', '7f0e397bd097c36b0b6fc9210c8dc2', '9778397bd097c36c9210c9274c920e',
            '97b6b97bd19801ec95f8c965cc920f', '97bd07f5307f595b0b0bc920fb0722', '7f0e397bd097c36b0b6fc9210c8dc2',
            '9778397bd097c36c9210c9274c91aa', '97b6b97bd19801ec9210c965cc920e', '97bd07f1487f595b0b0bc920fb0722',
            '7f0e397bd097c36b0b6fc9210c8dc2', '9778397bd097c36b0b6fc9274c91aa', '97b6b97bd19801ec9210c965cc920e',
            '97bcf7f1487f595b0b0bb0b6fb0722', '7f0e397bd097c35b0b6fc920fb0722', '9778397bd097c36b0b6fc9274c91aa',
            '97b6b97bd19801ec9210c965cc920e', '97bcf7f1487f595b0b0bb0b6fb0722', '7f0e397bd097c35b0b6fc920fb0722',
            '9778397bd097c36b0b6fc9274c91aa', '97b6b97bd19801ec9210c965cc920e', '97bcf7f1487f531b0b0bb0b6fb0722',
            '7f0e397bd097c35b0b6fc920fb0722', '9778397bd097c36b0b6fc9274c91aa', '97b6b97bd19801ec9210c965cc920e',
            '97bcf7f1487f531b0b0bb0b6fb0722', '7f0e397bd07f595b0b6fc920fb0722', '9778397bd097c36b0b6fc9274c91aa',
            '97b6b97bd19801ec9210c9274c920e', '97bcf7f0e47f531b0b0bb0b6fb0722', '7f0e397bd07f595b0b0bc920fb0722',
            '9778397bd097c36b0b6fc9210c91aa', '97b6b97bd197c36c9210c9274c920e', '97bcf7f0e47f531b0b0bb0b6fb0722',
            '7f0e397bd07f595b0b0bc920fb0722', '9778397bd097c36b0b6fc9210c8dc2', '9778397bd097c36c9210c9274c920e',
            '97b6b7f0e47f531b0723b0b6fb0722', '7f0e37f5307f595b0b0bc920fb0722', '7f0e397bd097c36b0b6fc9210c8dc2',
            '9778397bd097c36b0b70c9274c91aa', '97b6b7f0e47f531b0723b0b6fb0721', '7f0e37f1487f595b0b0bb0b6fb0722',
            '7f0e397bd097c35b0b6fc9210c8dc2', '9778397bd097c36b0b6fc9274c91aa', '97b6b7f0e47f531b0723b0b6fb0721',
            '7f0e27f1487f595b0b0bb0b6fb0722', '7f0e397bd097c35b0b6fc920fb0722', '9778397bd097c36b0b6fc9274c91aa',
            '97b6b7f0e47f531b0723b0b6fb0721', '7f0e27f1487f531b0b0bb0b6fb0722', '7f0e397bd097c35b0b6fc920fb0722',
            '9778397bd097c36b0b6fc9274c91aa', '97b6b7f0e47f531b0723b0b6fb0721', '7f0e27f1487f531b0b0bb0b6fb0722',
            '7f0e397bd097c35b0b6fc920fb0722', '9778397bd097c36b0b6fc9274c91aa', '97b6b7f0e47f531b0723b0b6fb0721',
            '7f0e27f1487f531b0b0bb0b6fb0722', '7f0e397bd07f595b0b0bc920fb0722', '9778397bd097c36b0b6fc9274c91aa',
            '97b6b7f0e47f531b0723b0787b0721', '7f0e27f0e47f531b0b0bb0b6fb0722', '7f0e397bd07f595b0b0bc920fb0722',
            '9778397bd097c36b0b6fc9210c91aa', '97b6b7f0e47f149b0723b0787b0721', '7f0e27f0e47f531b0723b0b6fb0722',
            '7f0e397bd07f595b0b0bc920fb0722', '9778397bd097c36b0b6fc9210c8dc2', '977837f0e37f149b0723b0787b0721',
            '7f07e7f0e47f531b0723b0b6fb0722', '7f0e37f5307f595b0b0bc920fb0722', '7f0e397bd097c35b0b6fc9210c8dc2',
            '977837f0e37f14998082b0787b0721', '7f07e7f0e47f531b0723b0b6fb0721', '7f0e37f1487f595b0b0bb0b6fb0722',
            '7f0e397bd097c35b0b6fc9210c8dc2', '977837f0e37f14998082b0787b06bd', '7f07e7f0e47f531b0723b0b6fb0721',
            '7f0e27f1487f531b0b0bb0b6fb0722', '7f0e397bd097c35b0b6fc920fb0722', '977837f0e37f14998082b0787b06bd',
            '7f07e7f0e47f531b0723b0b6fb0721', '7f0e27f1487f531b0b0bb0b6fb0722', '7f0e397bd097c35b0b6fc920fb0722',
            '977837f0e37f14998082b0787b06bd', '7f07e7f0e47f531b0723b0b6fb0721', '7f0e27f1487f531b0b0bb0b6fb0722',
            '7f0e397bd07f595b0b0bc920fb0722', '977837f0e37f14998082b0787b06bd', '7f07e7f0e47f531b0723b0b6fb0721',
            '7f0e27f1487f531b0b0bb0b6fb0722', '7f0e397bd07f595b0b0bc920fb0722', '977837f0e37f14998082b0787b06bd',
            '7f07e7f0e47f149b0723b0787b0721', '7f0e27f0e47f531b0b0bb0b6fb0722', '7f0e397bd07f595b0b0bc920fb0722',
            '977837f0e37f14998082b0723b06bd', '7f07e7f0e37f149b0723b0787b0721', '7f0e27f0e47f531b0723b0b6fb0722',
            '7f0e397bd07f595b0b0bc920fb0722', '977837f0e37f14898082b0723b02d5', '7ec967f0e37f14998082b0787b0721',
            '7f07e7f0e47f531b0723b0b6fb0722', '7f0e37f1487f595b0b0bb0b6fb0722', '7f0e37f0e37f14898082b0723b02d5',
            '7ec967f0e37f14998082b0787b0721', '7f07e7f0e47f531b0723b0b6fb0722', '7f0e37f1487f531b0b0bb0b6fb0722',
            '7f0e37f0e37f14898082b0723b02d5', '7ec967f0e37f14998082b0787b06bd', '7f07e7f0e47f531b0723b0b6fb0721',
            '7f0e37f1487f531b0b0bb0b6fb0722', '7f0e37f0e37f14898082b072297c35', '7ec967f0e37f14998082b0787b06bd',
            '7f07e7f0e47f531b0723b0b6fb0721', '7f0e27f1487f531b0b0bb0b6fb0722', '7f0e37f0e37f14898082b072297c35',
            '7ec967f0e37f14998082b0787b06bd', '7f07e7f0e47f531b0723b0b6fb0721', '7f0e27f1487f531b0b0bb0b6fb0722',
            '7f0e37f0e366aa89801eb072297c35', '7ec967f0e37f14998082b0787b06bd', '7f07e7f0e47f149b0723b0787b0721',
            '7f0e27f1487f531b0b0bb0b6fb0722', '7f0e37f0e366aa89801eb072297c35', '7ec967f0e37f14998082b0723b06bd',
            '7f07e7f0e47f149b0723b0787b0721', '7f0e27f0e47f531b0723b0b6fb0722', '7f0e37f0e366aa89801eb072297c35',
            '7ec967f0e37f14998082b0723b06bd', '7f07e7f0e37f14998083b0787b0721', '7f0e27f0e47f531b0723b0b6fb0722',
            '7f0e37f0e366aa89801eb072297c35', '7ec967f0e37f14898082b0723b02d5', '7f07e7f0e37f14998082b0787b0721',
            '7f07e7f0e47f531b0723b0b6fb0722', '7f0e36665b66aa89801e9808297c35', '665f67f0e37f14898082b0723b02d5',
            '7ec967f0e37f14998082b0787b0721', '7f07e7f0e47f531b0723b0b6fb0722', '7f0e36665b66a449801e9808297c35',
            '665f67f0e37f14898082b0723b02d5', '7ec967f0e37f14998082b0787b06bd', '7f07e7f0e47f531b0723b0b6fb0721',
            '7f0e36665b66a449801e9808297c35', '665f67f0e37f14898082b072297c35', '7ec967f0e37f14998082b0787b06bd',
            '7f07e7f0e47f531b0723b0b6fb0721', '7f0e26665b66a449801e9808297c35', '665f67f0e37f1489801eb072297c35',
            '7ec967f0e37f14998082b0787b06bd', '7f07e7f0e47f531b0723b0b6fb0721', '7f0e27f1487f531b0b0bb0b6fb0722'],
        nStr1: ["\u65e5", "\u4e00", "\u4e8c", "\u4e09", "\u56db", "\u4e94", "\u516d", "\u4e03", "\u516b", "\u4e5d", "\u5341"],
        nStr2: ["\u521d", "\u5341", "\u5eff", "\u5345"],
        nStr3: ["\u6b63", "\u4e8c", "\u4e09", "\u56db", "\u4e94", "\u516d", "\u4e03", "\u516b", "\u4e5d", "\u5341", "\u51ac", "\u814a"],
        lYearDays: function (y) {
            var i, sum = 348;
            for (i = 0x8000; i > 0x8; i >>= 1) { sum += (calendar.lunarInfo[y - 1900] & i) ? 1 : 0; }
            return (sum + calendar.leapDays(y));
        },
        leapMonth: function (y) {
            return (calendar.lunarInfo[y - 1900] & 0xf);
        },
        leapDays: function (y) {
            if (calendar.leapMonth(y)) {
                return ((calendar.lunarInfo[y - 1900] & 0x10000) ? 30 : 29);
            }
            return (0);
        },
        monthDays: function (y, m) {
            if (m > 12 || m < 1) { return -1 }
            return ((calendar.lunarInfo[y - 1900] & (0x10000 >> m)) ? 30 : 29);
        },
        solarDays: function (y, m) {
            if (m > 12 || m < 1) { return -1 }
            var ms = m - 1;
            if (ms == 1) {
                return (((y % 4 == 0) && (y % 100 != 0) || (y % 400 == 0)) ? 29 : 28);
            } else {
                return (calendar.solarMonth[ms]);
            }
        },
        toGanZhi: function (offset) {
            return (calendar.Gan[offset % 10] + calendar.Zhi[offset % 12]);
        },
        getTerm: function (y, n) {
            if (y < 1900 || y > 2100) { return -1; }
            if (n < 1 || n > 24) { return -1; }
            var _table = calendar.sTermInfo[y - 1900];
            var _info = [
                parseInt('0x' + _table.substr(0, 5)).toString(),
                parseInt('0x' + _table.substr(5, 5)).toString(),
                parseInt('0x' + _table.substr(10, 5)).toString(),
                parseInt('0x' + _table.substr(15, 5)).toString(),
                parseInt('0x' + _table.substr(20, 5)).toString(),
                parseInt('0x' + _table.substr(25, 5)).toString()
            ];
            var _calday = [
                _info[0].substr(0, 1),
                _info[0].substr(1, 2),
                _info[0].substr(3, 1),
                _info[0].substr(4, 2),
                _info[1].substr(0, 1),
                _info[1].substr(1, 2),
                _info[1].substr(3, 1),
                _info[1].substr(4, 2),
                _info[2].substr(0, 1),
                _info[2].substr(1, 2),
                _info[2].substr(3, 1),
                _info[2].substr(4, 2),
                _info[3].substr(0, 1),
                _info[3].substr(1, 2),
                _info[3].substr(3, 1),
                _info[3].substr(4, 2),
                _info[4].substr(0, 1),
                _info[4].substr(1, 2),
                _info[4].substr(3, 1),
                _info[4].substr(4, 2),
                _info[5].substr(0, 1),
                _info[5].substr(1, 2),
                _info[5].substr(3, 1),
                _info[5].substr(4, 2),
            ];
            return parseInt(_calday[n - 1]);
        },
        toChinaMonth: function (m) {
            if (m > 12 || m < 1) { return -1 }
            var s = calendar.nStr3[m - 1];
            s += "\u6708";
            return s;
        },
        toChinaDay: function (d) {
            var s;
            switch (d) {
                case 10:
                    s = '\u521d\u5341';
                    break;
                case 20:
                    s = '\u4e8c\u5341';
                    break;
                case 30:
                    s = '\u4e09\u5341';
                    break;
                default:
                    s = calendar.nStr2[Math.floor(d / 10)];
                    s += calendar.nStr1[d % 10];
            }
            return (s);
        },
        getAnimal: function (y) {
            return calendar.Animals[(y - 4) % 12]
        },
        solar2lunar: function (y, m, d) {
            if (y < 1900 || y > 2100) { return -1; }
            if (y == 1900 && m == 1 && d < 31) { return -1; }
            if (!y) {
                var objDate = new Date();
            } else {
                var objDate = new Date(y, parseInt(m) - 1, d)
            }
            var i, leap = 0, temp = 0;
            var y = objDate.getFullYear(), m = objDate.getMonth() + 1, d = objDate.getDate();
            var offset = (Date.UTC(objDate.getFullYear(), objDate.getMonth(), objDate.getDate()) - Date.UTC(1900, 0, 31)) / 86400000;
            for (i = 1900; i < 2101 && offset > 0; i++) { temp = calendar.lYearDays(i); offset -= temp; }
            if (offset < 0) { offset += temp; i--; }
            var isTodayObj = new Date(), isToday = false;
            if (isTodayObj.getFullYear() == y && isTodayObj.getMonth() + 1 == m && isTodayObj.getDate() == d) {
                isToday = true;
            }
            var nWeek = objDate.getDay(), cWeek = calendar.nStr1[nWeek];
            if (nWeek == 0) { nWeek = 7; }
            var year = i;
            var leap = calendar.leapMonth(i);
            var isLeap = false;
            for (i = 1; i < 13 && offset > 0; i++) {
                if (leap > 0 && i == (leap + 1) && isLeap == false) {
                    --i;
                    isLeap = true; temp = calendar.leapDays(year);
                } else {
                    temp = calendar.monthDays(year, i);
                }
                if (isLeap == true && i == (leap + 1)) { isLeap = false; }
                offset -= temp;
            }
            if (offset == 0 && leap > 0 && i == leap + 1) {
                if (isLeap) {
                    isLeap = false;
                } else {
                    isLeap = true; --i;
                }
            }
            if (offset < 0) { offset += temp; --i; }
            var month = i;
            var day = offset + 1;
            var sm = m - 1;
            var term3 = calendar.getTerm(year, 3);
            var gzY = calendar.toGanZhi(year - 4);
            gzY = calendar.toGanZhi(year - 4); //modify
            var firstNode = calendar.getTerm(y, (m * 2 - 1));
            var secondNode = calendar.getTerm(y, (m * 2));
            var gzM = calendar.toGanZhi((y - 1900) * 12 + m + 11);
            if (d >= firstNode) {
                gzM = calendar.toGanZhi((y - 1900) * 12 + m + 12);
            }
            var isTerm = false;
            var Term = null;
            if (firstNode == d) {
                isTerm = true;
                Term = calendar.solarTerm[m * 2 - 2];
            }
            if (secondNode == d) {
                isTerm = true;
                Term = calendar.solarTerm[m * 2 - 1];
            }
            var dayCyclical = Date.UTC(y, sm, 1, 0, 0, 0, 0) / 86400000 + 25567 + 10;
            var gzD = calendar.toGanZhi(dayCyclical + d - 1);
            return { 'lYear': year, 'lMonth': month, 'lDay': day, 'Animal': calendar.getAnimal(year), 'IMonthCn': (isLeap ? "\u95f0" : '') + calendar.toChinaMonth(month), 'IDayCn': calendar.toChinaDay(day), 'cYear': y, 'cMonth': m, 'cDay': d, 'gzYear': gzY, 'gzMonth': gzM, 'gzDay': gzD, 'isToday': isToday, 'isLeap': isLeap, 'nWeek': nWeek, 'ncWeek': "\u661f\u671f" + cWeek, 'isTerm': isTerm, 'Term': Term };
        }
    };
    //公历节日
    var _festival1 = {
        '0101': '元旦节',
        '0108': '周恩来逝世纪念日',
        '0110': '中国人民警察节',
        '0126': '国际海关日',
        '0202': '世界湿地日',
        '0204': '世界癌症日',
        '0207': '国际声援南非日',
        '0210': '国际气象节',
        '0214': '情人节',
        '0219': '邓小平逝世纪念日',
        '0301': '国际海豹日 国际民防日',
        '0303': '全国爱耳日',
        '0305': '学雷锋纪念日 中国青年志愿者服务日',
        '0306': '世界青光眼日',
        '0307': '女生节',
        '0308': '妇女节',
        '0309': '保护母亲河日',
        '0311': '国际尊严尊敬日',
        '0312': '植树节',
        '0314': '国际警察日 白色情人节',
        '0315': '消费者权益日',
        '0317': '中国国医节 国际航海日',
        '0318': '全国科技人才活动日 全国爱肝日',
        '0321': '世界森林日 国际消除种族歧视日 世界儿歌日 世界诗歌日 世界睡眠日 世界唐氏综合征日 ',
        '0322': '世界水日',
        '0323': '世界气象日',
        '0324': '世界防治结核病日',
        '0327': '世界戏剧日',
        '0329': '黄花岗七十二烈士殉难纪念日',
        '0401': '全国爱国卫生运动月(四月) 税收宣传月(四月) 愚人节',
        '0402': '国际儿童图书日 世界自闭症日',
        '0405': '清明',
        '0407': '世界卫生日',
        '0410': '非洲环境保护日',
        '0411': '世界帕金森病日',
        '0415': '全民国家安全教育日',
        '0417': '世界血友病日',
        '0418': '国际古迹遗址日',
        '0421': '全国企业家活动日',
        '0422': '世界地球日 世界法律日',
        '0423': '世界图书和版权日 中国人民解放军海军建军节',
        '0424': '中国航天日 亚非新闻工作者日 世界青年反对殖民主义日',
        '0425': '全国儿童预防接种宣传日 世界防治疟疾日',
        '0426': '世界知识产权日',
        '0429': '化学战受害者纪念日',
        '0430': '全国交通安全反思日',
        '0501': '劳动节',
        '0503': '世界新闻自由日',
        '0504': '青年节 科技传播日',
        '0515': '防治碘缺乏病日',
        '0508': '世界红十字日',
        '0510': '中国品牌日',
        '0512': '国际护士节 全国防灾减灾日',
        '0515': '国际家庭日 碘缺乏病防治日',
        '0517': '世界电信日',
        '0518': '国际博物馆日',
        '0519': '中国旅游日',
        '0520': '全国学生营养日 全国母乳喂养宣传日 世界计量日',
        '0521': '世界文化发展日',
        '0522': '国际生物多样性日',
        '0526': '世界向人体条件挑战日',
        '0529': '国际维和人员日',
        '0531': '世界无烟日',
        '0601': '国际儿童节 世界牛奶日',
        '0604': '受侵略戕害的无辜儿童国际日',
        '0605': '世界环境日',
        '0606': '全国爱眼日',
        '0608': '世界海洋日',
        '0612': '世界无童工日',
        '0614': '世界献血者日',
        '0617': '世界防治荒漠化和干旱日',
        '0620': '世界难民日',
        '0622': '中国儿童慈善活动日',
        '0623': '国际奥林匹克日',
        '0625': '全国土地日',
        '0626': '国际禁毒日 联合国宪章日 支援酷刑受害者国际日',
        '0701': '建党节 香港回归纪念日',
        '0702': '国际体育记者日',
        '0706': '国际接吻日',
        '0708': '世界过敏性疾病日',
        '0711': '中国航海日 世界人口日',
        '0718': '纳尔逊·曼德拉国际日',
        '0720': '人类月球日',
        '0726': '世界语创立日',
        '0728': '世界肝炎日',
        '0801': '建军节',
        '0808': '中国男子节(爸爸节) 全民健身日',
        '0812': '国际青年节',
        '0813': '国际左撇子日',
        '0815': '日本无条件投降日',
        '0819': '中国医师节',
        '0826': '全国律师咨询日',
        '0903': '中国人民抗日战争胜利纪念日',
        '0905': '中华(国际)慈善日',
        '0908': '国际扫盲日 国际新闻工作者日',
        '0910': '教师节 世界预防自杀日',
        '0915': '国际民主日',
        '0916': '国际臭氧层保护日 中国脑健康日',
        '0918': '九·一八事变纪念日',
        '0920': '全国(国际)爱牙日 公民道德宣传日',
        '0921': '国际和平日 世界停火日 世界阿尔茨海默病日',
        '0927': '世界旅游日',
        '0928': '孔子诞辰日',
        '0929': '世界心脏日',
        '0930': '烈士纪念日',
        '1001': '国庆节 国际音乐日 国际老人节',
        '1002': '国际非暴力日 国际和平与民主自由斗争日',
        '1004': '世界动物日',
        '1008': '全国高血压日',
        '1005': '世界教师日',
        '1009': '世界邮政日',
        '1010': '辛亥革命纪念日 世界精神卫生日',
        '1011': '国际女童日',
        '1012': '世界关节炎日',
        '1013': '世界保健日 国际减灾日 国际标准时间日 中国少先队建队日',
        '1014': '世界标准日',
        '1015': '国际盲人节 国际农村妇女日',
        '1016': '世界粮食日',
        '1017': '国际消除贫困日 国家扶贫日',
        '1020': '世界骨质疏松日 世界厨师日',
        '1022': '世界传统医药日',
        '1024': '联合国日 世界发展信息日',
        '1025': '抗美援朝纪念日 人类天花绝迹日',
        '1028': '世界男性健康日',
        '1031': '世界勤俭日',
        '1107': '十月社会主义革命纪念日',
        '1108': '中国记者日',
        '1109': '消防宣传日',
        '1111': '国际科学与和平周(本日所属的一周)',
        '1112': '孙中山诞辰纪念日',
        '1114': '世界防治糖尿病日',
        '1116': '国际宽容日',
        '1117': '国际大学生节',
        '1119': '世界厕所日',
        '1120': '世界儿童日',
        '1121': '世界问候日 世界电视日',
        '1125': '国际消除对妇女暴力日',
        '1129': '声援巴勒斯坦人民国际日',
        '1201': '世界艾滋病日',
        '1202': '全国交通安全日 废除奴隶制国际日',
        '1203': '国际残疾人日',
        '1204': '全国法制宣传日 国家宪法日',
        '1205': '国际志愿人员日 世界弱能人士日',
        '1207': '国际民航日',
        '1209': '世界足球日 国际反腐败日 一二·九运动纪念日',
        '1210': '世界人权日',
        '1211': '国际山岳日',
        '1212': '西安事变纪念日',
        '1213': '国家公祭日',
        '1215': '世界强化免疫日',
        '1218': '国际移徙者日',
        '1219': '联合国南南合作日',
        '1220': '澳门回归日',
        '1221': '国际篮球日',
        '1224': '平安夜',
        '1225': '圣诞节',
        '1226': '毛泽东诞辰纪念日'
    };
    //某月的第几个星期几,第3位为5表示最后一星期
    var _festival2 = {
        '0110': '黑人日',
        '0150': '世界麻风日',
        '0324': '世界肾脏日',
        '0332': '世界社会工作日',
        '0351': '全国中小学生安全教育日',
        '0520': '母亲节',
        '0530': '全国助残日',
        '0626': '文化和自然遗产日',
        '0630': '父亲节',
        '0716': '国际合作节',
        '0926': '世界急救日',
        '0936': '全民国防教育日',
        '0930': '世界清洁地球日',
        '0940': '国际聋人节',
        '1011': '世界住房日 国际建筑日',
        '1024': '世界视觉日',
        '1031': '世界镇痛日',
        '1124': '吉尼斯世界纪录日',
        '1220': '国际儿童电视广播日'
    };
    //农历节日
    var _festival3 = {
        '0101': '春节',
        '0102': '初二',
        '0103': '初三',
        '0115': '元宵节',
        '0202': '龙抬头节',
        '0303': '上巳节',
        '0323': '妈祖生辰',
        '0505': '端午节',
        '0624': '火把节',
        '0707': '七夕节',
        '0715': '中元节',
        '0815': '中秋节',
        '0909': '重阳节 中国老年节',
        '1001': '寒衣节',
        '1015': '下元节',
        '1208': '腊八节',
        '1223': '小年',
        '0100': '除夕'
    };
    //假日安排数据
    var _holiday = {
        '2011': { '0402': 0, '0403': 1, '0404': 1, '0405': 1, '0430': 1, '0501': 1, '0502': 1, '0604': 1, '0605': 1, '0606': 1, '0910': 1, '0911': 1, '0912': 1, '1001': 1, '1002': 1, '1003': 1, '1004': 1, '1005': 1, '1006': 1, '1007': 1, '1008': 0, '1009': 0, '1231': 0 },
        '2012': { '0101': 1, '0102': 1, '0103': 1, '0121': 0, '0122': 1, '0123': 1, '0124': 1, '0125': 1, '0126': 1, '0127': 1, '0128': 1, '0129': 0, '0331': 0, '0401': 0, '0402': 1, '0403': 1, '0404': 1, '0428': 0, '0429': 1, '0430': 1, '0501': 1, '0622': 1, '0623': 1, '0624': 1, '0929': 0, '0930': 1, '1001': 1, '1002': 1, '1003': 1, '1004': 1, '1005': 1, '1006': 1, '1007': 1 },
        '2013': { '0101': 1, '0102': 1, '0103': 1, '0105': 0, '0106': 0, '0209': 1, '0210': 1, '0211': 1, '0212': 1, '0213': 1, '0214': 1, '0215': 1, '0216': 0, '0217': 0, '0404': 1, '0405': 1, '0406': 1, '0407': 0, '0427': 0, '0428': 0, '0429': 1, '0430': 1, '0501': 1, '0608': 0, '0609': 0, '0610': 1, '0611': 1, '0612': 1, '0919': 1, '0920': 1, '0921': 1, '0922': 0, '0929': 0, '1001': 1, '1002': 1, '1003': 1, '1004': 1, '1005': 1, '1006': 1, '1007': 1, '1012': 0 },
        '2014': { '0101': 1, '0126': 0, '0131': 1, '0201': 1, '0202': 1, '0203': 1, '0203': 1, '0204': 1, '0205': 1, '0206': 1, '0208': 0, '0405': 1, '0406': 1, '0407': 1, '0501': 1, '0502': 1, '0503': 1, '0504': 0, '0531': 1, '0601': 1, '0602': 1, '0908': 1, '0928': 0, '1001': 1, '1002': 1, '1003': 1, '1004': 1, '1005': 1, '1006': 1, '1007': 1, '1011': 0 },
        '2015': { '0101': 1, '0102': 1, '0103': 1, '0104': 0, '0215': 0, '0218': 1, '0219': 1, '0220': 1, '0221': 1, '0222': 1, '0223': 1, '0224': 1, '0228': 0, '0404': 1, '0405': 1, '0406': 1, '0501': 1, '0502': 1, '0503': 1, '0620': 1, '0621': 1, '0622': 1, '0903': 1, '0904': 1, '0905': 1, '0906': 0, '0927': 1, '1001': 1, '1002': 1, '1003': 1, '1004': 1, '1005': 1, '1006': 1, '1007': 1, '1010': 0 },
        '2016': { '0101': 1, '0102': 1, '0103': 1, '0206': 0, '0207': 1, '0208': 1, '0209': 1, '0210': 1, '0211': 1, '0212': 1, '0213': 1, '0214': 0, '0402': 1, '0403': 1, '0404': 1, '0430': 1, '0501': 1, '0502': 1, '0609': 1, '0610': 1, '0611': 1, '0612': 0, '0915': 1, '0916': 1, '0917': 1, '0918': 0, '1001': 1, '1002': 1, '1003': 1, '1004': 1, '1005': 1, '1006': 1, '1007': 1, '1008': 0, '1009': 0 },
        '2017': { '0101': 1, '0102': 1, '0122': 0, '0127': 1, '0128': 1, '0129': 1, '0130': 1, '0131': 1, '0201': 1, '0202': 1, '0204': 0, '0401': 0, '0402': 1, '0403': 1, '0404': 1, '0429': 1, '0430': 1, '0501': 1, '0527': 0, '0528': 1, '0529': 1, '0530': 1, '0930': 0, '1001': 1, '1002': 1, '1003': 1, '1004': 1, '1005': 1, '1006': 1, '1007': 1, '1008': 1, '1230': 1, '1231': 1 },
        '2018': { '0101': 1, '0211': 0, '0215': 1, '0216': 1, '0217': 1, '0218': 1, '0219': 1, '0220': 1, '0221': 1, '0224': 0, '0405': 1, '0406': 1, '0407': 1, '0408': 0, '0428': 0, '0429': 1, '0430': 1, '0501': 1, '0616': 1, '0617': 1, '0618': 1, '0922': 1, '0923': 1, '0924': 1, '0929': 0, '0930': 0, '1001': 1, '1002': 1, '1003': 1, '1004': 1, '1005': 1, '1006': 1, '1007': 1, '1229': 0, '1230': 1, '1231': 1 },
        '2019': { '0101': 1, '0202': 0, '0203': 0, '0204': 1, '0205': 1, '0206': 1, '0207': 1, '0208': 1, '0209': 1, '0210': 1, '0405': 1, '0406': 1, '0407': 1, '0428': 0, '0501': 1, '0502': 1, '0503': 1, '0504': 1, '0505': 0, '0607': 1, '0608': 1, '0609': 1, '0913': 1, '0914': 1, '0915': 1, '0929': 0, '1001': 1, '1002': 1, '1003': 1, '1004': 1, '1005': 1, '1006': 1, '1007': 1, '1012': 0 },
        '2020': { '0101': 1, '0119': 0, '0124': 1, '0125': 1, '0126': 1, '0127': 1, '0128': 1, '0129': 1, '0130': 1, '0201': 0, '0404': 1, '0405': 1, '0406': 1, '0426': 0, '0501': 1, '0502': 1, '0503': 1, '0504': 1, '0505': 1, '0509': 0, '0625': 1, '0626': 1, '0627': 1, '0628': 0, '0927': 0, '1001': 1, '1002': 1, '1003': 1, '1004': 1, '1005': 1, '1006': 1, '1007': 1, '1008': 1, '1010': 0 },
        '2021': { '0101': 1, '0102': 1, '0103': 1, '0207': 0, '0211': 1, '0212': 1, '0213': 1, '0214': 1, '0215': 1, '0216': 1, '0217': 1, '0220': 0, '0403': 1, '0404': 1, '0405': 1, '0425': 0, '0501': 1, '0502': 1, '0503': 1, '0504': 1, '0505': 1, '0508': 0, '0612': 1, '0613': 1, '0614': 1, '0918': 0, '0919': 1, '0920': 1, '0921': 1, '0926': 0, '1001': 1, '1002': 1, '1003': 1, '1004': 1, '1005': 1, '1006': 1, '1007': 1, '1009': 0 },
        '2022': { '0101': 1, '0102': 1, '0103': 1, '0129': 0, '0130': 0, '0131': 1, '0201': 1, '0202': 1, '0203': 1, '0204': 1, '0205': 1, '0206': 1, '0402': 0, '0403': 1, '0404': 1, '0405': 1, '0424': 0, '0430': 1, '0501': 1, '0502': 1, '0503': 1, '0504': 1, '0507': 0, '0603': 1, '0604': 1, '0605': 1, '0910': 1, '0911': 1, '0912': 1, '1001': 1, '1002': 1, '1003': 1, '1004': 1, '1005': 1, '1006': 1, '1007': 1, '1008': 0, '1009': 0 }
    };
    //获取日期数据
    var getDateObj = function (year, month, day) {
        var date = arguments.length && year ? new Date(year, month - 1, day) : new Date();
        return {
            'year': date.getFullYear(),
            'month': date.getMonth() + 1,
            'day': date.getDate(),
            'week': date.getDay()
        };
    };
    //当天
    var _today = getDateObj();
    //获取当月天数
    var getMonthDays = function (obj) {
        var day = new Date(obj.year, obj.month, 0);
        return day.getDate();
    };
    if (!String.prototype.trim) {
        String.prototype.trim = function () {
            return this.replace(/^\s+|\s+$/g, '');
        };
    }
    //获取某天日期信息
    var getDateInfo = function (obj) {
        var info = calendar.solar2lunar(obj.year, obj.month, obj.day);
        var cMonth = info.cMonth > 9 ? '' + info.cMonth : '0' + info.cMonth;
        var cDay = info.cDay > 9 ? '' + info.cDay : '0' + info.cDay;
        var lMonth = info.lMonth > 9 ? '' + info.lMonth : '0' + info.lMonth;
        var lDay = info.lDay > 9 ? '' + info.lDay : '0' + info.lDay;
        var code1 = cMonth + cDay;
        var code2 = cMonth + Math.ceil(info.cDay / 7) + info.nWeek % 7;
        var code3 = lMonth + lDay;
        var days = getMonthDays(obj);
        //节日信息
        info['festival'] = '';
        if (_festival3[code3]) {
            info['festival'] += _festival3[code3];
        }
        if (_festival1[code1]) {
            info['festival'] += ' ' + _festival1[code1];
        }
        if (_festival2[code2]) {
            info['festival'] += ' ' + _festival2[code2];
        }
        if (obj['day'] + 7 > days) {
            var code4 = cMonth + 5 + info.nWeek % 7;
            if (code4 != code2 && _festival2[code4]) {
                info['festival'] += ' ' + _festival2[code4];
            }
        }
        info['festival'] = info['festival'].trim();
        //放假、调休等标记
        info['sign'] = '';
        if (_holiday[info.cYear]) {
            var holiday = _holiday[info.cYear];
            if (typeof holiday[code1] != 'undefined') {
                info['sign'] = holiday[code1] ? 'holiday' : 'work';
            }
        }
        if (info.cYear == _today.year && info.cMonth == _today.month && info.cDay == _today.day) {
            info['sign'] = 'today';
        }
        return info;
    };
    //获取日历信息
    return (function (date) {
        var date = date || _today;
        var first = getDateObj(date['year'], date['month'], 1);		//当月第一天
        var days = getMonthDays(date);							//当月天数
        var data = [];										//日历信息
        var obj = {};
        //上月日期
        for (var i = first['week']; i > 0; i--) {
            obj = getDateObj(first['year'], first['month'], first['day'] - i);
            var info = getDateInfo(obj);
            info['disabled'] = 1;
            data.push(info);
        }
        //当月日期
        for (var i = 0; i < days; i++) {
            obj = {
                'year': first['year'],
                'month': first['month'],
                'day': first['day'] + i,
                'week': (first['week'] + i) % 7
            };
            var info = getDateInfo(obj);
            info['disabled'] = 0;
            data.push(info);
        }
        //下月日期
        var last = obj;
        for (var i = 1; last['week'] + i < 7; i++) {
            obj = getDateObj(last['year'], last['month'], last['day'] + i);
            var info = getDateInfo(obj);
            info['disabled'] = 1;
            data.push(info);
        }
        return {
            'date': getDateInfo(date),				//当前日历选中日期
            'data': data
        };
    });
})();

//万年历
(function () {
    var $mod_calendar = DOMUtil.getElementsByClassName('mod-calendar')[0];
    var $table = DOMUtil.getElementsByClassName('table', $mod_calendar)[0];
    var $year = DOMUtil.getElementsByClassName('year', $mod_calendar)[0];
    var $month = DOMUtil.getElementsByClassName('month', $mod_calendar)[0];
    var $holiday = DOMUtil.getElementsByClassName('holiday', $mod_calendar)[0];
    var $goback = DOMUtil.getElementsByClassName('goback', $mod_calendar)[0];
    var $prev_year = DOMUtil.getElementsByClassName('prev-year', $mod_calendar)[0];
    var $next_year = DOMUtil.getElementsByClassName('next-year', $mod_calendar)[0];
    var $prev_month = DOMUtil.getElementsByClassName('prev-month', $mod_calendar)[0];
    var $next_month = DOMUtil.getElementsByClassName('next-month', $mod_calendar)[0];
    var _data = [];
    var _day = 1;
    var holiday = {
        '2011': [
            {
                value: '2011-01-01',
                name: '元旦'
            },
            {
                value: '2011-02-03',
                name: '春节'
            },
            {
                value: '2011-04-05',
                name: '清明'
            },
            {
                value: '2011-05-01',
                name: '劳动节'
            },
            {
                value: '2011-06-06',
                name: '端午节'
            },
            {
                value: '2011-09-12',
                name: '中秋节'
            },
            {
                value: '2011-10-01',
                name: '国庆节'
            }
        ],
        '2012': [
            {
                value: '2012-01-01',
                name: '元旦'
            },
            {
                value: '2012-01-23',
                name: '春节'
            },
            {
                value: '2012-04-04',
                name: '清明'
            },
            {
                value: '2012-05-01',
                name: '劳动节'
            },
            {
                value: '2012-06-23',
                name: '端午节'
            },
            {
                value: '2012-09-30',
                name: '中秋节'
            },
            {
                value: '2012-10-01',
                name: '国庆节'
            }
        ],
        '2013': [
            {
                value: '2013-01-01',
                name: '元旦'
            },
            {
                value: '2013-02-10',
                name: '春节'
            },
            {
                value: '2013-04-04',
                name: '清明'
            },
            {
                value: '2013-05-01',
                name: '劳动节'
            },
            {
                value: '2013-06-12',
                name: '端午节'
            },
            {
                value: '2013-09-19',
                name: '中秋节'
            },
            {
                value: '2013-10-01',
                name: '国庆节'
            }
        ],
        '2014': [
            {
                value: '2014-01-01',
                name: '元旦'
            },
            {
                value: '2014-01-31',
                name: '春节'
            },
            {
                value: '2014-04-05',
                name: '清明'
            },
            {
                value: '2014-05-01',
                name: '劳动节'
            },
            {
                value: '2014-06-02',
                name: '端午节'
            },
            {
                value: '2014-09-08',
                name: '中秋节'
            },
            {
                value: '2014-10-01',
                name: '国庆节'
            }
        ],
        '2015': [
            {
                value: '2015-01-01',
                name: '元旦'
            },
            {
                value: '2015-02-19',
                name: '春节'
            },
            {
                value: '2015-04-05',
                name: '清明'
            },
            {
                value: '2015-05-01',
                name: '劳动节'
            },
            {
                value: '2015-06-20',
                name: '端午节'
            },
            {
                value: '2015-09-03',
                name: '胜利日'
            },
            {
                value: '2015-09-27',
                name: '中秋节'
            },
            {
                value: '2015-10-01',
                name: '国庆节'
            }
        ],
        '2016': [
            {
                value: '2016-01-01',
                name: '元旦'
            },
            {
                value: '2016-02-08',
                name: '春节'
            },
            {
                value: '2016-04-04',
                name: '清明'
            },
            {
                value: '2016-05-01',
                name: '劳动节'
            },
            {
                value: '2016-06-09',
                name: '端午节'
            },
            {
                value: '2016-09-15',
                name: '中秋节'
            },
            {
                value: '2016-10-01',
                name: '国庆节'
            }
        ],
        '2017': [
            {
                value: '2017-01-01',
                name: '元旦'
            },
            {
                value: '2017-01-28',
                name: '春节'
            },
            {
                value: '2017-04-04',
                name: '清明'
            },
            {
                value: '2017-05-01',
                name: '劳动节'
            },
            {
                value: '2017-05-30',
                name: '端午节'
            },
            {
                value: '2017-10-04',
                name: '中秋节'
            },
            {
                value: '2017-10-01',
                name: '国庆节'
            }
        ],
        '2018': [
            {
                value: '2018-01-01',
                name: '元旦'
            },
            {
                value: '2018-02-16',
                name: '春节'
            },
            {
                value: '2018-04-05',
                name: '清明'
            },
            {
                value: '2018-05-01',
                name: '劳动节'
            },
            {
                value: '2018-06-18',
                name: '端午节'
            },
            {
                value: '2018-09-24',
                name: '中秋节'
            },
            {
                value: '2018-10-01',
                name: '国庆节'
            }
        ],
        '2019': [
            {
                value: '2019-01-01',
                name: '元旦'
            },
            {
                value: '2019-02-05',
                name: '春节'
            },
            {
                value: '2019-04-05',
                name: '清明'
            },
            {
                value: '2019-05-01',
                name: '劳动节'
            },
            {
                value: '2019-06-07',
                name: '端午节'
            },
            {
                value: '2019-09-13',
                name: '中秋节'
            },
            {
                value: '2019-10-01',
                name: '国庆节'
            }
        ],
        '2020': [
            {
                value: '2020-01-01',
                name: '元旦'
            },
            {
                value: '2020-01-25',
                name: '春节'
            },
            {
                value: '2020-04-04',
                name: '清明'
            },
            {
                value: '2020-05-01',
                name: '劳动节'
            },
            {
                value: '2020-06-25',
                name: '端午节'
            },
            {
                value: '2020-10-01',
                name: '中秋节'
            },
            {
                value: '2020-10-01',
                name: '国庆节'
            }
        ],
        '2021': [
            {
                value: '2021-01-01',
                name: '元旦'
            },
            {
                value: '2021-02-11',
                name: '春节'
            },
            {
                value: '2021-04-03',
                name: '清明'
            },
            {
                value: '2021-05-01',
                name: '劳动节'
            },
            {
                value: '2021-06-12',
                name: '端午节'
            },
            {
                value: '2021-9-19',
                name: '中秋节'
            },
            {
                value: '2021-10-01',
                name: '国庆节'
            }
        ],
        '2022': [
            {
                value: '2022-01-01',
                name: '元旦'
            },
            {
                value: '2022-01-31',
                name: '春节'
            },
            {
                value: '2022-04-03',
                name: '清明'
            },
            {
                value: '2022-04-30',
                name: '劳动节'
            },
            {
                value: '2022-06-03',
                name: '端午节'
            },
            {
                value: '2022-09-10',
                name: '中秋节'
            },
            {
                value: '2022-10-01',
                name: '国庆节'
            }
        ]
    };
    var format = function (date) {
        var result = getData(date);
        var date = result['date'];
        _data = result['data'];
        var map = {
            'work': '班',
            'holiday': '休'
        }
        var html = '<table>\
			<thead>\
				<tr><th>日</th><th>一</th><th>二</th><th>三</th><th>四</th><th>五</th><th>六</th></tr>\
			</thead>\
			<tbody>\
				<tr>';
        for (var i = 0, len = _data.length; i < len; i++) {
            var item = _data[i];
            var className = '', className2 = '';
            if (item['sign']) {
                className += item['sign'];
            }
            if (item['disabled']) {
                className += ' disabled';
            }
            if (date && item['cMonth'] == date['cMonth'] && item['cDay'] == date['cDay']) {
                className2 = 'active';
            }
            var festival = item['festival'].split(' ')[0];
            if (festival.length > 3) {
                festival = '';
            }
            html += '<td class="' + className + '" data-id="' + i + '">\
				<a href="javascript:;"'+ (className2 ? ' class="' + className2 + '"' : '') + '>\
					<span class="s1">'+ item['cDay'] + '</span>\
					<span class="s2">'+ (item['Term'] || festival || item['IDayCn']) + '</span>\
					'+ (item['sign'] && map[item['sign']] ? '<i>' + map[item['sign']] + '</i>' : '') + '\
				</a>\
			</td>';
            if (i % 7 == 6 && i < len - 1) {
                html += '</tr><tr>';
            }
        }
        html += '</tr>\
			</tbody>\
		</table>';
        $year.value = date['cYear'];
        $month.value = date['cMonth'];
        $table.innerHTML = html;
    };
    var format_setting = function (year) {
        var year = year || (new Date()).getFullYear();
        $holiday.innerHTML = '';
        var $o = new Option("假日安排", "");
        $holiday.add($o);
        if (holiday[year]) {
            var items = holiday[year];
            for (var i = 0; i < items.length; i++) {
                var $option = new Option(items[i]['name'], items[i]['value']);
                $holiday.add($option);
            }
        }
    };
    $year.onchange = function () {
        var year = $year.value;
        var month = $month.value;
        format({ 'year': year, 'month': month, 'day': _day });
        format_setting(year);
    };
    $month.onchange = function () {
        var year = $year.value;
        var month = $month.value;
        format({ 'year': year, 'month': month, 'day': _day });
    };
    $holiday.onchange = function () {
        var value = this.value;
        if (value) {
            var arr = value.split('-');
            format({ 'year': +arr[0], 'month': +arr[1], 'day': +arr[2] });
        }
    };
    $goback.onclick = function () {
        format();
        format_setting();
    };
    $prev_year.onclick = function () {
        var year = $year.value;
        var month = $month.value;
        year--;
        format({ 'year': year, 'month': month, 'day': _day });
        format_setting(year);
    };
    $next_year.onclick = function () {
        var year = $year.value;
        var month = $month.value;
        year++;
        format({ 'year': year, 'month': month, 'day': _day });
        format_setting(year);
    };
    $prev_month.onclick = function () {
        var year = $year.value;
        var month = $month.value;
        month--;
        format({ 'year': year, 'month': month, 'day': _day });
        if (month == 0) format_setting(--year);
    };
    $next_month.onclick = function () {
        var year = $year.value;
        var month = $month.value;
        month++;
        format({ 'year': year, 'month': month, 'day': _day });
        //alert(year);alert(month);
        if (month == 13) format_setting(++year);
    };
    $table.onclick = function (e) {
        e = e || window.event;
        var target = e.target || e.srcElement;
        while (target.tagName != 'TD' && target.tagName != 'TABLE') {
            target = target.parentNode;
        }
        var id = target.getAttribute('data-id');
        if (target.tagName == 'TD' && id) {
            var data = _data[id];
            _day = data['cDay'];
            format({ 'year': data['cYear'], 'month': data['cMonth'], 'day': data['cDay'] });
        }
    };
    format();
    format_setting();
})();

大功告成!

最后欢迎大家讨论发言,提出问题~~~

  • 3
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

         .         

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值