自己写了个日历插件

<!DOCTYPE html>
<html>
        <head>
                <title>日历</title>
                <meta charset="utf-8">
                <script src="js/jquery.js"></script>
                <style>
                        .wdate{position:relative;left:100px;}
                        .rili{border:1px solid #bbb;padding:10px;}
                        .rili{text-align:center;min-200px;100%;max-200px;position:absolute;}
                        .rili .left{float:left;margin-left:20px;display:block;border-top: 10px solid transparent;border-bottom: 10px solid transparent;border-right: 10px solid #000000; 0;height: 0;margin: 0 auto;}
                        .rili .right{float:right;margin-right:20px;display:block;border-top: 10px solid transparent;border-bottom: 10px solid transparent;border-left: 10px solid #000000; 0;height: 0;margin: 0 auto;}
                        .rili .header{height:22px;line-height:22px;90%;margin:0 auto;}
                        .rili .table{margin-top:5px;padding:5px;100%;border-collapse:collapse;}
                        .rili .table th{14%;}
                        .rili .table tr{margin:10px;}
                        .rili .nowd{background:#b1dcfb;border:1px solid #0089ec;}
                        .rili .prev{color:#dddddd;}
                        .rili #hour,.rili #minutes,.rili #seconds{display:none;border:1px solid #bbb;}
                        .rili #seconds{padding:1px 4px;}
                        .rili .nav{float: left;margin-top: 10px;margin-left: 7px;}
                        .rili .nav .choose{border:1px solid #bbb;display:inline-block;padding:1px 13px;}
                        .rili .aleft{float:left;margin-top:15px;text-decoration: none;color: #fff;background: #349E34;font-size: 14px;padding: 5px;border-radius: 3px;}
                        .rili .aright{float:right;margin-top:15px;text-decoration: none;color: #fff;background: #bbb;font-size: 14px;padding: 5px;border-radius: 3px;}
                        .rili .check{background: #090!important;}
                </style>
        </head>
        <body>
                <div style="margin:auto;">
                        <input type="text" name="wdate" class="wdate" onClick="initialie('hours')">
                </div>
                <script>
                        var patt = new RegExp(/^[0-9]*[1-9][0-9]*$/);
                        function te() {
                            return $(".rili").on("click", ".right,.left", function () {
                                if ($(".months").is(":hidden") && $(this).hasClass('right')) {
                                    $(".rili .year").html(parseInt($(".rili .year").html()) + 1);
                                } else if ($(".months").is(":hidden") && $(this).hasClass('left')) {
                                    $(".rili .year").html(parseInt($(".rili .year").html()) - 1);
                                } else {
                                    var nmonth = transformation($(".rili .month").html(), '2');
                                    var year = parseInt($(".rili .year").html());
                                    var month1 = 0;
                                    if ($(this).hasClass('right')) {
                                        if (nmonth == '12') {
                                            nmonth = '0';
                                            year += 1;
                                        }
                                        month1 = parseInt(nmonth + 1);
                                    } else {
                                        if (nmonth == '1') {
                                            nmonth = '13';
                                            year -= 1;
                                        }
                                        month1 = parseInt(nmonth - 1);
                                    }
                                    var month = transformation(month1, '1');
                                    var days = getDays(month1, year);
                                    if (month1 == 12 || month1 == 1) {
                                        var days2 = getDays(month1, year);
                                    } else {
                                        var days2 = getDays(month1 - 1, year);
                                    }
                                    append(year, month1, days2);
                                }
                            }), $(".rili").on("dblclick", ".table td", function () {
                                if (types.type == 'hour') {
                                    $("input[name='wdate']").val($(this).attr("date") + " " + $(".rili .choose .hour").html() + ":" + $(".rili .choose .minutes").html() + ":" + $(".rili .choose .seconds").html());
                                } else {
                                    $("input[name='wdate']").val($(this).attr("date"));
                                }
                            }),$(".rili").on("click", ".table td", function () {
                                    $(".rili .table td").each(function(){
                                            $(this).removeClass("check");
                                    })
                                    $(this).addClass("check");
                            }), $(".rili").on("click", ".hour,.minutes,.seconds", function (e) {
                                e = e || window.event;
                                if (e.stopPropagation) { //W3C阻止冒泡方法  
                                    e.stopPropagation();
                                } else {
                                    e.cancelBubble = true; //IE阻止冒泡方法  
                                }
                                $("#" + $(this).attr('class')).siblings("div").hide();
                                $("#" + $(this).attr('class')).css({"display": "block", "position": "absolute", "left": $(".rili .nav .choose").position().left, "bottom": $(".rili").outerHeight() - $(".rili .nav .hour").position().top, "background": "#fff"});
                            }), $(".rili").on("click", ".date", function () {
                                $(".rili .months,.rili .shi").hide();
                                var string = '<tr class="td">';
                                $.each(months, function (i, e) {
                                    if (patt.test(i / 4)) {
                                        string += '<tr class="td">';
                                    }
                                    string += "<td class='mon'>" + e + "</td>";
                                })
                                $(".rili .table").empty();
                                $(".rili .table").append(string).css({"border-collapse":"separate","border-spacing":"0px 10px"});
                            }), $(".rili").on("click", ".mon", function () {
                                $(".rili .months,.rili .shi").show();
                                $(".rili .table").css({"border-collapse":"collapse"});
                                var year = parseInt($(".rili .year").html());
                                var month = $(this).html();
                                var month = transformation(month.replace("月", ''), 2);
                                var days2 = getDays(month, year);
                                append(year, month, days2);
                            }), $(".rili").on("click", "#hour table td,#minutes table td,#seconds table td", function (e) {
                                e = e || window.event;
                                if (e.stopPropagation) { //W3C阻止冒泡方法  
                                    e.stopPropagation();
                                } else {
                                    e.cancelBubble = true; //IE阻止冒泡方法 
                                }
                                $(".rili .choose ." + $(this).parents("div").attr("id")).html($(this).html());
                            }), $("body").on("click", ".rili", function () {
                                $(".rili #hour,.rili #minutes,.rili #seconds").hide();
                            }), $(".rili").on("mouseover", ".td td", function () {
                                $(this).css("background", "#b1dcfb");
                            }), $(".rili").on("mouseout", ".td td", function () {
                                if (!$(this).hasClass("nowd")) {
                                    $(this).css("background", "#fff");
                                }
                            }),$(".rili").on("click",".aleft",function(){
                                    //alert($(".rili .check").html())
                                    if($(".rili .check").html() == undefined){
                                            $(".rili .table td").trigger("dblclick");
                                    }else{
                                            if (types.type == 'hour') {
                                                $("input[name='wdate']").val($(".rili .check").attr("date") + " " + $(".rili .choose .hour").html() + ":" + $(".rili .choose .minutes").html() + ":" + $(".rili .choose .seconds").html());
                                            } else {
                                                $("input[name='wdate']").val($(".rili .check").attr("date"));
                                            }
                                    }
                                    types.status = false;
                                    $(".rili").hide();
                            }),$(".rili").on("click",".aright",function(){
                                    types.status = false;
                                    $(".rili").hide();
                            })
                        }

                        var chnNumChar = {
                            一: 1,
                            二: 2,
                            三: 3,
                            四: 4,
                            五: 5,
                            六: 6,
                            七: 7,
                            八: 8,
                            九: 9,
                            十: 10,
                            十一: 11,
                            十二: 12
                        };
                        var months = ['一月', '二月', '三月', '四月', '五月', '六月', '七月', '八月', '九月', '十月', '十一', '十二'];
                        //initialie('hours');//初始化
                        function transformation(num, type) {
                            var month = '';
                            $.each(chnNumChar, function (i, e) {
                                if (type == '1') {
                                    if (num == e) {
                                        month = i;
                                    }
                                } else {
                                    if (num == i) {
                                        month = e;
                                    }
                                }
                            })
                            return month;
                        }

                        function getDays(month, year) {
                            var days;
                            if (month == 2) {
                                days = year % 4 == 0 ? 29 : 28;
                            } else if (month == 1 || month == 3 || month == 5 || month == 7 || month == 8 || month == 10 || month == 12) {
                                days = 31;
                            } else {
                                days = 30;
                            }
                            return days;
                        }

                        function date(days, week, day2, myDate,day3) {
                            var date2 = new Date();
                            console.log(day3);
                            if(day3 != undefined){
                                    var nowDate = day3;
                            }else{
                                    var nowDate = date2.getDate();
                            }
                            var day1year = myDate.getFullYear();
                            var day1month = myDate.getMonth() + 1;
                            var day1year2 = day1year;
                            var day1month2 = day1month;
                            if (day1month == 1) {
                                day1month2 = 13;
                                day1year2 = day1year - 1;
                            } else if (day1month == 12) {
                                day1month2 = 0;
                                day1year2 = day1year + 1;
                            }
                            var day3year = date2.getFullYear();
                            var day3month = date2.getMonth() + 1;
                            //console.log(myDate.getFullYear(),myDate.getMonth() + 1,date2.getFullYear(),date2.getMonth() + 1);
                            var num2 = 0;
                            var string = '<tr class="head"><th>日</th><th>一</th><th>二</th><th>三</th><th>四</th><th>五</th><th>六</th></tr><tr class="td">';
                            for (var i = 1; i <= week; i++) {
                                string += '<td class="prev" date = "' + day1year2 + '-' + (day1month2 - 1) + '-' + (day2 - week + i) + '">' + (day2 - week + i) + '</td>';
                            }
                            for (var i = 1; i <= days; i++) {
                                if (patt.test((week + i - 1) / 7)) {
                                    string += '<tr class="td">';
                                    num2 += 1;
                                }
                                if (i < 10) {
                                    var i2 = '0' + i;
                                } else {
                                    var i2 = i;
                                }
                                if (day1year == day3year && day1month == day3month && i == nowDate) {
                                    string += '<td class="nowd" date = "' + day1year2 + '-' + day1month2 + '-' + i2 + '">' + i + '</td>';
                                } else {
                                    string += '<td date = "' + day1year2 + '-' + day1month2 + '-' + i2 + '">' + i + '</td>';
                                }
                            }
                            var num3 = 42 - (week + days);
                            for (var i = 1; i <= num3; i++) {
                                if (patt.test(((week + days) - num2 * 7 + i - 1) / 7)) {
                                    string += '<tr class="td">';
                                }
                                if (i < 10) {
                                    var i2 = '0' + i;
                                }
                                string += '<td class="prev" date = "' + day1year2 + '-' + (day1month2 + 1) + '-' + i2 + '">' + i + '</td>';
                            }
                            $(".rili .table").empty();
                            $(".rili .table").append(string);
                        }

                        function initialie(hours) {
                                if(types.status){
                                        return false;
                                }else{
                                        types.status = true;
                                }
                                $(".rili").remove();
                            var string = '<div class="rili"><div class="header"><span class="left"></span><div class="date" style="display:inline-block;"><div class="months" style="display:inline-block;"><span class="month"></span><span>月</span></div> <span class="year"></span></div><span class="right"></span></div><table class="table"></table><div><a href="javascript:;" class="aleft">确定</a><a href="javascript:;" class="aright">取消</a></div></div>';
                            $(".wdate").after(string);
                            $(".rili").css({"position": "absolute", "left": $(".wdate").offset().left, "top": $(".wdate").outerHeight() + $(".wdate").offset().top, "z-index": "1000"});
                            var time = hour();
                            if (hours == 'hours') {
                                types.aa('hour');
                                var string2 = '<div class="shi"><div id="hour"><table>

<tr><td>1</td><td>2</td><td>3</td><td>4</td>
<td>5</td><td>6</td></tr>

<tr><td>7</td><td>8</td><td>9</td><td>10</td><td>11</td><td>12</td></tr>

<tr><td>13</td><td>14</td><td>15</td><td>16</td><td>17</td><td>18</td></tr>

<tr><td>19</td><td>20</td><td>21</td><td>22</td><td>23</td><td>24</td></tr>

</table></div><div id="minutes"><table>

<tr><td>0</td><td>5</td><td>10</td><td>15</td><td>20</td><td>25</td>

<tr><td>30</td><td>35</td><td>40</td><td>45</td><td>50</td><td>55</td>

</tr></table></div><div id="seconds"><table><tr>

<td>0</td><td>10</td><td>20</td><td>30</td><td>40</td><td>50</td></tr></table></div><nav class="nav">时间 <div class="choose"><span class="hour">' + time.hour + '</span> : <span class="minutes">' + time.minutes + '</span> : <span class="seconds">' + time.seconds + '</span></div></nav></div>';
                                $(".rili .table").after(string2);
                            }
                            $("body").append(te());
                            var itime = $(".wdate").val();
                            var days = '';
                            if(itime != ''){
                                    itime = itime.split(" ");
                                    days = itime[0].split("-");
                                    var myDate = new Date(itime[0]);
                            }else{
                                    var myDate = new Date();
                                    myDate.setDate(1);
                            }
                            if(types.type && itime != ''){
                                    var xs = itime[1].split(":");
                                    $(".rili .hour").html(xs[0]);
                                    $(".rili .minutes").html(xs[1]);
                                    $(".rili .seconds").html(xs[2]);
                            }
                            var y = myDate.getFullYear();
                            var m = myDate.getMonth() + 1;
                            var m2 = transformation(m, '1');
                            var m3 = myDate.getMonth();
                            var day = getDays(m, y);
                            var day2 = getDays(m3, y);
                            var week = myDate.getDay();
                            var myDate2 = new Date();
                            $(".rili .month").html(m2);
                            $(".rili .year").html(y);
                            date(day, week, day2, myDate2, days[2]);
                        }

                        function append(year, month, days2) {
                            $(".rili .year").html(year, 1);
                            $(".rili .month").html(transformation(month, 1));
                            var days = getDays(month, year);
                            if (!days2) {
                                var days2 = getDays(month, year);
                            }
                            var myDate = new Date(year + '/' + month + '/' + '01');
                            var week = myDate.getDay();
                            date(days, week, days2, myDate);
                        }

                        function hour() {
                            var date = new Date();
                            var time = [];
                            time['hour'] = date.getHours();
                            time['minutes'] = date.getMinutes();
                            time['seconds'] = date.getSeconds();
                            return time;
                        }

                        var types = {
                            type: '',
                            aa: function (type) {
                                return this.type = type;
                            }
                        };
                </script>
        </body>
</html>

  

原文地址:https://www.cnblogs.com/zjdeblog/p/6651896.html