Demo entry 6708534

fsssahfkjjjjjjjjjjjjjj67uyt

   

Submitted by anonymous on Feb 01, 2018 at 12:34
Language: JavaScript. Code size: 33.1 kB.

/**
@Name : layDate v1.1 日期控件
 @Author: gary
 @Date: 2018-01-27
 @github:http://github.com/sdriedfish
*/

;
! function(win) {
    "use strict";
    //全局配置,如果采用默认均不需要改动
    var config = {
        path: '', //laydate所在路径
        skin: 'default', //初始化皮肤
        format: 'YYYY-MM-DD', //日期格式
        min: '1900-01-01 00:00:00', //最小日期
        max: '2099-12-31 23:59:59', //最大日期
        lang: 'cn', //只支持cn/en
        init: true
    };

    var Dates = {},
        doc = document,
        creat = 'createElement',
        byid = 'getElementById',
        tags = 'getElementsByTagName';

    //生成日期
    Dates.months = [31, null, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];
    var as = ['laydate_box', 'laydate_void', 'laydate_click', 'LayDateSkin', 'skins/', '/laydate.css'];


    //主接口
    win.laydate = function(options) {
        options = options || {};

        try {
            as.event = win.event ? win.event : laydate.caller.arguments[0];
        } catch (e) {}
        Dates.run(options);
        return laydate;
    };

    laydate.v = '1.1';

    //获取组件存放路径
    Dates.getPath = (function() {
        var js = document.scripts,
            jsPath = js[js.length - 1].src;
        return config.path ? config.path : jsPath.substring(0, jsPath.lastIndexOf("/") + 1);
    }());

    Dates.use = function(lib, id) {
        var link = doc[creat]('link');
        link.type = 'text/css';
        link.rel = 'stylesheet';
        link.href = Dates.getPath + lib + as[5];
        id && (link.id = id);
        doc[tags]('head')[0].appendChild(link);
        link = null;
    };

    Dates.trim = function(str) {
        str = str || '';
        return str.replace(/^\s|\s$/g, '').replace(/\s+/g, ' ');
    };

    //补齐数位
    Dates.digit = function(num) {
        return num < 10 ? '0' + (num | 0) : num;
    };

    Dates.stopmp = function(e) {
        e = e || win.event;
        e.stopPropagation ? e.stopPropagation() : e.cancelBubble = true;
        return this;
    };

    Dates.each = function(arr, fn) {
        var i = 0,
            len = arr.length;
        for (; i < len; i++) {
            if (fn(i, arr[i]) === false) {
                break;
            }
        }
    };

    Dates.hasClass = function(elem, cls) {
        elem = elem || {};
        return new RegExp('\\b' + cls + '\\b').test(elem.className);
    };

    Dates.addClass = function(elem, cls) {
        elem = elem || {};
        Dates.hasClass(elem, cls) || (elem.className += ' ' + cls);
        elem.className = Dates.trim(elem.className);
        return this;
    };

    Dates.removeClass = function(elem, cls) {
        elem = elem || {};
        if (Dates.hasClass(elem, cls)) {
            var reg = new RegExp('\\b' + cls + '\\b');
            elem.className = elem.className.replace(reg, '');
        }
        return this;
    };

    //清除css属性
    Dates.removeCssAttr = function(elem, attr) {
        var s = elem.style;
        if (s.removeProperty) {
            s.removeProperty(attr);
        } else {
            s.removeAttribute(attr);
        }
    };

    //显示隐藏
    Dates.shde = function(elem, type) {
        elem.style.display = type ? 'none' : 'block';
    };

    //简易选择器
    Dates.query = function(node) {
        if (node && node.nodeType === 1) {
            if (node.tagName.toLowerCase() !== 'input') {
                throw new Error('选择器elem错误');
            }
            return node;
        }
        var nodes = (Dates.trim(node)).split(' '),
            elemId = doc[byid](nodes[0].substr(1)),
            arr;
        if (!elemId) {
            return;
        } else if (!nodes[1]) {
            return elemId;
        } else if (/^\./.test(nodes[1])) {
            var find, child = nodes[1].substr(1),
                exp = new RegExp('\\b' + child + '\\b');
            arr = [];
            find = doc.getElementsByClassName ? elemId.getElementsByClassName(child) : elemId[tags]('*');
            Dates.each(find, function(ii, that) {
                exp.test(that.className) && arr.push(that);
            });
            return arr;
        } else {
            return elemId[tags](nodes[1]);
        }
    };

    //事件监听器
    Dates.on = function(elem, even, fn) {
        elem.attachEvent ? elem.attachEvent('on' + even, function() {
            fn.call(elem, win.even);
        }) : elem.addEventListener(even, fn, false);
        return Dates;
    };

    //阻断mouseup
    Dates.stopMosup = function(evt, elem) {
        if (evt !== 'mouseup') {
            Dates.on(elem, 'mouseup', function(ev) {
                Dates.stopmp(ev);
            });
        }
    };

    Dates.run = function(options) {
        var S = Dates.query,
            elem, devt, even = as.event,
            target;
        try {
            target = even.target || even.srcElement || {};
        } catch (e) {
            target = {};
        }
        elem = options.elem ? S(options.elem) : target;
        elem.setAttribute("readonly", "");
        as.elemv = /textarea|input/.test(elem.tagName.toLocaleLowerCase()) ? 'value' : 'innerHTML';
        if (('init' in options ? options.init : config.init) && (!elem[as.elemv])) elem[as.elemv] = options.value || laydate.now(null, options.format || config.format);

        if (even && target.tagName) {
            if (!elem || elem === Dates.elem) {
                return;
            }
            Dates.stopMosup(even.type, elem);
            Dates.stopmp(even);
            Dates.view(elem, options);
            Dates.reshow();
        } else {
            devt = options.event || 'click';
            Dates.each((elem.length | 0) > 0 ? elem : [elem], function(ii, that) {
                Dates.stopMosup(devt, that);
                Dates.on(that, devt, function(ev) {
                    Dates.stopmp(ev);
                    if (that !== Dates.elem) {
                        Dates.view(that, options);
                        Dates.reshow();
                    }
                });
            });
        }
    };

    Dates.getI18n = function(lang) {
        return laydate.l10n[lang] || laydate.l10n.cn;
    };

    Dates.scroll = function(type) {
        type = type ? 'scrollLeft' : 'scrollTop';
        return doc.body[type] | doc.documentElement[type];
    };

    Dates.winarea = function(type) {
        return document.documentElement[type ? 'clientWidth' : 'clientHeight'];
    };

    //判断闰年
    Dates.isleap = function(year) {
        return (year % 4 === 0 && year % 100 !== 0) || year % 400 === 0;
    };

    //检测是否在有效期
    Dates.checkVoid = function(YY, MM, DD) {
        var back = [];
        YY = YY | 0;
        MM = MM | 0;
        DD = DD | 0;
        if (YY < Dates.mins[0]) {
            back = ['y'];
        } else if (YY > Dates.maxs[0]) {
            back = ['y', 1];
        } else if (YY >= Dates.mins[0] && YY <= Dates.maxs[0]) {
            if (YY == Dates.mins[0]) {
                if (MM < Dates.mins[1]) {
                    back = ['m'];
                } else if (MM == Dates.mins[1]) {
                    if (DD < Dates.mins[2]) {
                        back = ['d'];
                    }
                }
            }
            if (YY == Dates.maxs[0]) {
                if (MM > Dates.maxs[1]) {
                    back = ['m', 1];
                } else if (MM == Dates.maxs[1]) {
                    if (DD > Dates.maxs[2]) {
                        back = ['d', 1];
                    }
                }
            }
        }
        return back;
    };

    //时分秒的有效检测
    Dates.timeVoid = function(times, index) {
        if (Dates.ymd[1] + 1 == Dates.mins[1] && Dates.ymd[2] == Dates.mins[2]) {
            if (index === 0 && (times < Dates.mins[3])) {
                return 1;
            } else if (index === 1 && times < Dates.mins[4]) {
                return 1;
            } else if (index === 2 && times < Dates.mins[5]) {
                return 1;
            }
        } else if (Dates.ymd[1] + 1 == Dates.maxs[1] && Dates.ymd[2] == Dates.maxs[2]) {
            if (index === 0 && times > Dates.maxs[3]) {
                return 1;
            } else if (index === 1 && times > Dates.maxs[4]) {
                return 1;
            } else if (index === 2 && times > Dates.maxs[5]) {
                return 1;
            }
        }
        if (times > (index ? 59 : 23)) {
            return 1;
        }
    };

    //检测日期是否合法
    Dates.check = function() {
        var reg = Dates.options.format.replace(/YYYY|MM|DD|hh|mm|ss/g, '\\d+\\').replace(/\\$/g, '');
        var exp = new RegExp(reg),
            value = Dates.elem[as.elemv];
        var arr = value.match(/\d+/g) || [],
            isvoid = Dates.checkVoid(arr[0], arr[1], arr[2]);
        if (value.replace(/\s/g, '') !== '') {
            if (!exp.test(value) || isvoid[0]) {
                Dates.elem[as.elemv] = '';
                Dates.msg('日期不符合格式,请重新选择。');
                return 1;
            } else {
                isvoid.value = Dates.elem[as.elemv].match(exp).join();
                arr = isvoid.value.match(/\d+/g);
                if (arr[1] < 1) {
                    arr[1] = 1;
                    isvoid.auto = 1;
                } else if (arr[1] > 12) {
                    arr[1] = 12;
                    isvoid.auto = 1;
                } else if (arr[1].length < 2) {
                    isvoid.auto = 1;
                }
                if (arr[2] < 1) {
                    arr[2] = 1;
                    isvoid.auto = 1;
                } else if (arr[2] > Dates.months[(arr[1] | 0) - 1]) {
                    arr[2] = 31;
                    isvoid.auto = 1;
                } else if (arr[2].length < 2) {
                    isvoid.auto = 1;
                }
                if (arr.length > 3) {
                    if (Dates.timeVoid(arr[3], 0)) {
                        isvoid.auto = 1;
                    }
                    if (Dates.timeVoid(arr[4], 1)) {
                        isvoid.auto = 1;
                    }
                    if (Dates.timeVoid(arr[5], 2)) {
                        isvoid.auto = 1;
                    }
                }
                if (isvoid.auto) {
                    Dates.creation([arr[0], arr[1] | 0, arr[2] | 0], 1);
                } else if (isvoid.value !== Dates.elem[as.elemv]) {
                    Dates.elem[as.elemv] = isvoid.value;
                }
            }
        }
    };


    Dates.viewDate = function(Y, M, D) {
        var S = Dates.query,
            log = {},
            mms = S('#layui-laydate-list li'),
            De = new Date();
        Y < (Dates.mins[0] | 0) && (Y = (Dates.mins[0] | 0));
        Y > (Dates.maxs[0] | 0) && (Y = (Dates.maxs[0] | 0));

        De.setFullYear(Y, M, D);
        log.ymd = [De.getFullYear(), De.getMonth(), De.getDate()];

        Dates.months[1] = Dates.isleap(log.ymd[0]) ? 29 : 28;

        De.setFullYear(log.ymd[0], log.ymd[1], 1);
        log.FDay = De.getDay();

        log.PDay = Dates.months[M === 0 ? 11 : M - 1] - log.FDay + 1;
        log.NDay = 1;

        //渲染日
        Dates.each(as.tds, function(i, elem) {
            var YY = log.ymd[0],
                MM = log.ymd[1] + 1,
                DD;
            elem.className = '';
            if (i < log.FDay) {
                elem.innerHTML = DD = i + log.PDay;
                Dates.addClass(elem, 'laydate_nothis');
                MM === 1 && (YY -= 1);
                MM = MM === 1 ? 12 : MM - 1;
            } else if (i >= log.FDay && i < log.FDay + Dates.months[log.ymd[1]]) {
                elem.innerHTML = DD = i - log.FDay + 1;
                if (i - log.FDay + 1 === log.ymd[2]) {
                    Dates.addClass(elem, as[2]);
                    log.thisDay = elem;
                }
            } else {
                elem.innerHTML = DD = log.NDay++;
                Dates.addClass(elem, 'laydate_nothis');
                MM === 12 && (YY += 1);
                MM = MM === 12 ? 1 : MM + 1;
            }

            if (Dates.checkVoid(YY, MM, DD)[0]) {
                Dates.addClass(elem, as[1]);
            }

            elem.setAttribute('y', YY);
            elem.setAttribute('m', MM);
            elem.setAttribute('d', DD);
            YY = MM = DD = null;
        });

        Dates.valid = !Dates.hasClass(log.thisDay, as[1]);
        Dates.ymd = log.ymd;

        //锁定年月
        var lang = Dates.getI18n(Dates.isCN ? "cn" : "en");
        as.year.innerText = Dates.ymd[0] + lang.year;
        as.month.innerText = lang.months[Dates.ymd[1]];

        //定位月
        // Dates.each(mms, function(i, elem) {
        //     var getCheck = Dates.checkVoid(Dates.ymd[0], (elem.getAttribute('m') | 0) + 1);
        //     if (getCheck[0] === 'y' || getCheck[0] === 'm') {
        //         Dates.addClass(elem, as[1]);
        //     } else {
        //         Dates.removeClass(elem, as[1]);
        //     }
        //     Dates.removeClass(elem, as[2]);
        //     getCheck = null;
        // });
        Dates.addClass(mms[Dates.ymd[1]], as[2]);

        //定位时分秒
        log.times = [
            Dates.inymd[Dates.elemIndexMap.hour] | 0 || 0,
            Dates.inymd[Dates.elemIndexMap.minute] | 0 || 0,
            Dates.inymd[Dates.elemIndexMap.second] | 0 || 0
        ];
        Dates.each(new Array(3), function(i) {
            Dates.hmsin[i].innerText = Dates.digit(Dates.timeVoid(log.times[i], i) ? Dates.mins[i + 3] | 0 : log.times[i] | 0);
        });

        //确定按钮状态
        Dates[Dates.valid ? 'removeClass' : 'addClass'](as.ok, as[1]);
    };

    //生成年列表
    Dates.viewYears = function(YY) {
        var S = Dates.query,
            year = Dates.getI18n(Dates.isCN ? "cn" : "en").year,
            currentPosition = 4,
            str = '';
        Dates.each(new Array(12), function(i) {
            if (i === currentPosition) {
                str += '<li ' + (parseInt(as.year.innerText) === YY ? 'class="' + as[2] + '"' : '') + ' y="' + YY + '">' + YY + year + '</li>';
            } else {
                str += '<li y="' + (YY - currentPosition + i) + '">' + (YY - currentPosition + i) + year + '</li>';
            }
        });
        S('#layui-laydate-list').innerHTML = str;
        Dates.each(S('#layui-laydate-list li'), function(i, elem) {
            if (Dates.checkVoid(elem.getAttribute('y'))[0] === 'y') {
                Dates.addClass(elem, as[1]);
            } else {
                Dates.on(elem, 'click', function(ev) {
                    Dates.stopmp(ev).reshow();
                    Dates.viewDate(this.getAttribute('y') | 0, Dates.ymd[1], Dates.ymd[2]);
                });
            }
        });
    };

    Dates.viewMonth = function(MM, lang) {
        var S = Dates.query,
            str = '';
        Dates.each(lang.months, function(i, elem) {
            var month = i + 1;
            if (month === parseInt(MM)) {
                str += '<li class="' + as[2] + '"  m="' + i + '">' + elem + '</li>';
            } else {
                str += '<li m="' + i + '">' + elem + '</li>';
            }
        });
        S('#layui-laydate-list').innerHTML = str;
        //选择月
        Dates.each(S('#layui-laydate-list li'), function(i, elem) {
            if (Dates.checkVoid(Dates.ymd[0], (elem.getAttribute('m') | 0) + 1)[0] === 'm') {
                Dates.addClass(elem, as[1]);
            } else {
                Dates.on(elem, 'click', function(ev) {
                    Dates.stopmp(ev).reshow();
                    if (!Dates.hasClass(this, as[1])) {
                        Dates.viewDate(Dates.ymd[0], this.getAttribute('m') | 0, Dates.ymd[2]);
                    }
                });
            }

        });
    };

    Dates.getEachElementIndex = function(format) {
        var components = {};
        var currentIndex = 0;
        format.replace(/YYYY|MM|DD|hh|mm|ss/g, function(str, index) {
            if (str === 'YYYY') {
                components.year = currentIndex++;
            } else if (str === 'MM') {
                components.month = currentIndex++;
            } else if (str === 'DD') {
                components.day = currentIndex++;
            } else if (str === 'hh') {
                components.hour = currentIndex++;
            } else if (str === 'mm') {
                components.minute = currentIndex++;
            } else if (str === 'ss') {
                components.second = currentIndex++;
            }
            return "";
        });
        return components;
    };

    //初始化面板数据
    Dates.initDate = function(format) {
        var S = Dates.query,
            log = {},
            De = new Date();
        var ymd = Dates.elem[as.elemv].match(/\d+/g) || [];
        var elemIndexMap = Dates.getEachElementIndex(format);
        Dates.elemIndexMap = elemIndexMap;
        if (ymd.length < 3) {
            ymd = Dates.options.start.match(/\d+/g) || [];
            if (ymd.length < 3) {
                ymd = [De.getFullYear(), De.getMonth() + 1, De.getDate()];
            }
        }
        Dates.inymd = ymd;
        Dates.viewDate(ymd[elemIndexMap.year], ymd[elemIndexMap.month] - 1, ymd[elemIndexMap.day]);
    };

    //是否显示零件
    Dates.iswrite = function() {
        var S = Dates.query,
            log = {
                time: S('#laydate_hms')
            };
        Dates.shde(log.time, !Dates.options.istime);
        Dates.shde(as.oclear, !('isclear' in Dates.options ? Dates.options.isclear : 1));
        Dates.shde(as.otoday, !('istoday' in Dates.options ? Dates.options.istoday : 1));
        Dates.shde(as.ok, !('issure' in Dates.options ? Dates.options.issure : 1));
    };

    //方位辨别
    Dates.orien = function(obj, pos) {
        var rect = Dates.elem.getBoundingClientRect(),
            elemWidth = obj.offsetWidth,
            elemHeight = obj.offsetHeight,
            margin = 3,
            left = rect.left,
            top = rect.bottom + margin;
        //overflow-x
        if (left + elemWidth + margin > Dates.winarea('width')) {
            left = Dates.winarea('width') - elemWidth - margin;
        }
        //overflow-y
        if (top + elemHeight + margin > Dates.winarea()) {
            top = rect.top > elemHeight ?
                rect.top - elemHeight :
                Dates.winarea() - elemHeight;
            top = top - margin;
        }
        obj.style.left = left + Dates.scroll(1) + 'px';
        obj.style.top = top + Dates.scroll() + 'px';

    };


    //生成表格
    Dates.viewtb = function(lang) {
        var tr, view = [],
            weeks = lang.weekdays;
        var log = {},
            table = doc[creat]('table'),
            thead = doc[creat]('thead');
        thead.appendChild(doc[creat]('tr'));
        log.creath = function(i) {
            var th = doc[creat]('th');
            th.innerHTML = weeks[i];
            thead[tags]('tr')[0].appendChild(th);
            th = null;
        };

        Dates.each(new Array(6), function(i) {
            view.push([]);
            tr = table.insertRow(0);
            Dates.each(new Array(7), function(j) {
                view[i][j] = 0;
                i === 0 && log.creath(j);
                tr.insertCell(j);
            });
        });

        table.insertBefore(thead, table.children[0]);
        table.id = table.className = 'laydate_table';
        tr = view = null;
        return table.outerHTML;
    };

    //渲染控件骨架
    Dates.view = function(elem, options) {
        var S = Dates.query,
            lang = Dates.getI18n(options.lang),
            div, log = {};
        options = options || elem;

        Dates.elem = elem;
        Dates.options = options;
        Dates.options.format || (Dates.options.format = config.format);
        Dates.options.start = Dates.options.start || '';
        Dates.isCN = options.lang !== "en";
        Dates.mm = log.mm = [Dates.options.min || config.min, Dates.options.max || config.max];
        Dates.mins = log.mm[0].match(/\d+/g);
        Dates.maxs = log.mm[1].match(/\d+/g);

        if (!Dates.box) {
            div = doc[creat]('div');
            div.id = as[0];
            div.className = as[0];
            div.setAttribute('name', 'laydate-v' + laydate.v);
            div.innerHTML = log.html = '<div class="laydate_top">' +
                '<svg id="laydate_chprev" viewBox="0 0 17 17"><path d="M5.207 8.471l7.146 7.147-0.707 0.707-7.853-7.854 7.854-7.853 0.707 0.707-7.147 7.146z" /></svg>' +
                '<div class="laydate-set-ym">' +
                '<span class="laydate_ym" id="laydate_y" lay-type="year">' +
                '</span>' +
                '<span class="laydate_ym" id="laydate_m" lay-type="month">' +
                '</span>' +
                '</div>' +
                '<svg id="laydate_chnext" viewBox="0 0 17 17"><path d="M13.207 8.472l-7.854 7.854-0.707-0.707 7.146-7.146-7.146-7.148 0.707-0.707 7.854 7.854z" /></svg>' +
                '</div>' +
                '</div>' +
                '<div class="laydate-content">' +
                Dates.viewtb(lang) +
                '<ul id="layui-laydate-list"></ul>' +
                '</div>' +
                '<div class="laydate_bottom">' +
                '<ul id="laydate_hms">' +
                '<li><span class="time-hms"></span><span>:</span>' +
                '<li><span class="time-hms"></span><span>:</span>' +
                '<li><span class="time-hms"></span>' +
                '</ul>' +
                '<div class="laydate_time" id="laydate_time"></div>' +
                '<div class="laydate_btn">' +
                '<a id="laydate_clear">' + lang.tools.clear + '</a>' +
                '<a id="laydate_today">' + lang.tools.now + '</a>' +
                '<a id="laydate_ok">' + lang.tools.confirm + '</a>' +
                '</div>' +
                '</div>';
            doc.body.appendChild(div);
            Dates.box = S('#' + as[0]);
            Dates.events(lang);
            div = null;
        } else {
            Dates.shde(Dates.box);
        }
        Dates.orien(Dates.box);
        options.zIndex ? Dates.box.style.zIndex = options.zIndex : Dates.removeCssAttr(Dates.box, 'z-index');
        Dates.stopMosup('click', Dates.box);

        Dates.initDate(options.format);
        Dates.iswrite();
        Dates.check();
    };

    //隐藏内部弹出元素
    Dates.reshow = function() {
        Dates.each(Dates.query('#' + as[0] + ' .laydate_show'), function(i, elem) {
            Dates.removeClass(elem, 'laydate_show');
        });
        return this;
    };

    //关闭控件
    Dates.close = function() {
        Dates.reshow();
        Dates.shde(Dates.query('#' + as[0]), 1);
        Dates.elem = null;
    };

    //转换日期格式
    Dates.parse = function(ymd, hms, format) {
        ymd = ymd.concat(hms); // [year, month, day, hour, minute, second]
        format = format || (Dates.options ? Dates.options.format : config.format);
        return format.replace(/YYYY|MM|DD|hh|mm|ss/g, function(str, index) {
            var pos = -1;
            if (str === 'YYYY') {
                pos = 0;
            } else if (str === 'MM') {
                pos = 1;
            } else if (str === 'DD') {
                pos = 2;
            } else if (str === 'hh') {
                pos = 3;
            } else if (str === 'mm') {
                pos = 4;
            } else if (str === 'ss') {
                pos = 5;
            }
            return Dates.digit(ymd[pos]);
        });
    };

    //返回最终日期
    Dates.creation = function(ymd, hide) {
        var S = Dates.query,
            hms = Dates.hmsin;
        var getDates = Dates.parse(ymd, [hms[0].innerText, hms[1].innerText, hms[2].innerText]);
        Dates.elem[as.elemv] = getDates;
        if (!hide) {
            Dates.close();
            typeof Dates.options.choose === 'function' && Dates.options.choose(getDates);
        }
    };

    //事件
    Dates.events = function(lang) {
        var S = Dates.query,
            log = {
                box: '#' + as[0]
            };

        Dates.hmsin = log.hmsin = S('#laydate_hms .time-hms');
        Dates.addClass(doc.body, 'laydate_body');

        as.tds = S('#laydate_table td');
        as.year = S('#laydate_y');
        as.month = S('#laydate_m');
        as.datalist = S('#layui-laydate-list');
        as.laydate_chprev = S('#laydate_chprev');
        as.laydate_chnext = S('#laydate_chnext');

        //显示更多年月
        Dates.each(S(log.box + ' .laydate_ym'), function(i, elem) {
            Dates.on(elem, 'click', function(ev) {
                var layType = this.getAttribute("lay-type");
                Dates.stopmp(ev).reshow();
                Dates.addClass(as.datalist, 'laydate_show');
                as.datalist.setAttribute("lay-type", layType);
                if (layType === 'year') {
                    log.YY = parseInt(as.year.innerText);
                    Dates.viewYears(log.YY);
                } else {
                    Dates.viewMonth(as.month.innerText, lang);
                }
            });
        });


        //切换年
        log.tabYear = function(isAdd) {
            if (isAdd) {
                log.YY += 12;
            } else {
                log.YY -= 12;
            }
            Dates.viewYears(log.YY);
        };


        //切换月
        log.tabMonth = function(isAdd) {
            if (isAdd) {
                Dates.ymd[1]++;
                if (Dates.ymd[1] === 12) {
                    Dates.ymd[0]++;
                    Dates.ymd[1] = 0;
                }
            } else {
                Dates.ymd[1]--;
                if (Dates.ymd[1] === -1) {
                    Dates.ymd[0]--;
                    Dates.ymd[1] = 11;
                }
            }
            Dates.viewDate(Dates.ymd[0], Dates.ymd[1], Dates.ymd[2]);
        };


        Dates.on(as.laydate_chprev, 'click', function(ev) {
            Dates.stopmp(ev);
            var layType = as.datalist.getAttribute("lay-type");
            if (!Dates.hasClass(as.datalist, 'laydate_show')) {
                Dates.reshow();
                log.tabMonth(false);
            } else {
                log[layType === "year" ? "tabYear" : "tabMonth"](false);
            }
        });


        Dates.on(as.laydate_chnext, 'click', function(ev) {
            Dates.stopmp(ev);
            var layType = as.datalist.getAttribute("lay-type");
            if (!Dates.hasClass(as.datalist, 'laydate_show')) {
                Dates.reshow();
                log.tabMonth(true);
            } else {
                log[layType === "year" ? "tabYear" : "tabMonth"](true);
            }
        });

        //选择日
        Dates.each(S('#laydate_table td'), function(i, elem) {
            Dates.on(elem, 'click', function(ev) {
                if (!Dates.hasClass(this, as[1])) {
                    Dates.stopmp(ev);
                    Dates.removeClass(S("#laydate_table .laydate_click")[0], "laydate_click").addClass(this, "laydate_click");
                }
            });
        });

        //清空
        as.oclear = S('#laydate_clear');
        Dates.on(as.oclear, 'click', function() {
            Dates.elem[as.elemv] = '';
            Dates.close();
        });

        //今天
        as.otoday = S('#laydate_today');
        Dates.on(as.otoday, 'click', function() {
            var now = new Date();
            Dates.elem[as.elemv] = laydate.now(0, Dates.options.format);
            Dates.close();
        });

        //确认
        as.ok = S('#laydate_ok');
        Dates.on(as.ok, 'click', function() {
            if (Dates.valid) {
                Dates.creation([Dates.ymd[0], Dates.ymd[1] + 1, Dates.ymd[2]]);
            }
        });

        //选择时分秒
        log.times = S('#laydate_time');
        log.hmss = lang.time;
        log.hmsarr = [];

        //生成时分秒
        Dates.msg = function(i, title) {
            var str = '<div class="laydte_hsmtex">' + (title || '提示') + '<span>×</span></div>';
            if (typeof i === 'string') {
                str += '<p>' + i + '</p>';
                Dates.shde(S('#' + as[0]));
                Dates.addClass(log.times, 'laydate_msg');
            } else {
                if (!log.hmsarr[i]) {
                    str += '<div id="laydate_hmsno" class="laydate_hmsno">';
                    Dates.each(new Array(i === 0 ? 24 : 60), function(i) {
                        str += '<span>' + i + '</span>';
                    });
                    str += '</div>';
                    log.hmsarr[i] = str;
                } else {
                    str = log.hmsarr[i];
                }
                Dates.removeClass(log.times, 'laydate_msg');
                Dates[i !== 0 ? 'removeClass' : 'addClass'](log.times, 'laydate_hour');
            }
            Dates.addClass(log.times, 'laydate_show');
            log.times.innerHTML = str;
        };

        log.hmson = function(item, index) {
            var span = S('#laydate_hmsno span'),
                set = Dates.valid ? null : 1;
            Dates.each(span, function(i, elem) {
                if (set) {
                    Dates.addClass(elem, as[1]);
                } else if (Dates.timeVoid(i, index)) {
                    Dates.addClass(elem, as[1]);
                } else {
                    Dates.on(elem, 'click', function(ev) {
                        if (!Dates.hasClass(this, as[1])) {
                            item.innerText = Dates.digit(this.innerHTML | 0);
                        }
                    });
                }
            });
            Dates.addClass(span[item.innerText | 0], 'laydate_click');
        };


        //展开选择
        Dates.each(log.hmsin, function(i, elem) {
            Dates.on(elem, 'click', function(ev) {
                Dates.stopmp(ev).reshow();
                Dates.msg(i, log.hmss[i]);
                log.hmson(this, i);
            });
        });

        //隐藏时间选择
        Dates.on(log.times, 'click', function(ev) {
            Dates.stopmp(ev).reshow();
        });


        Dates.on(doc, 'mouseup', function() {
            var box = S('#' + as[0]);
            if (box && box.style.display !== 'none') {
                Dates.check() || Dates.close();
            }
        }).on(doc, 'keydown', function(event) {
            event = event || win.event;
            var codes = event.keyCode;

            //如果在日期显示的时候按回车
            if (codes === 13 && Dates.elem) {
                Dates.creation([Dates.ymd[0], Dates.ymd[1] + 1, Dates.ymd[2]]);
            }
        });
    };

    Dates.init = (function() {
        Dates.use('need');
        Dates.use(as[4] + config.skin, as[3]);
        Dates.skinLink = Dates.query('#' + as[3]);
    }());

    //重置定位
    laydate.reset = function() {
        (Dates.box && Dates.elem) && Dates.follow(Dates.box);
    };

    //返回指定日期
    laydate.now = function(timestamp, format) {
        var De = new Date((timestamp | 0) ? function(tamp) {
            return tamp < 86400000 ? (+new Date + tamp * 86400000) : tamp;
        }(parseInt(timestamp)) : +new Date);
        return Dates.parse(
            [De.getFullYear(), De.getMonth() + 1, De.getDate()], [De.getHours(), De.getMinutes(), De.getSeconds()],
            format
        );
    };

    //皮肤选择
    laydate.skin = function(lib) {
        Dates.skinLink.href = Dates.getPath + as[4] + lib + as[5];
    };

    laydate.l10n = {
        cn: {
            weekdays: ['日', '一', '二', '三', '四', '五', '六'],
            months: ['1月', '2月', '3月', '4月', '5月', '6月', '7月', '8月', '9月', '10月', '11月', '12月'],
            year: '年',
            time: ['时', '分', '秒'],
            tools: {
                confirm: '确定',
                clear: '清空',
                now: '现在'
            }
        },
        en: {
            weekdays: ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"],
            months: ["Jan", "Feb", "Mar", "Apr",
                "May", "Jun", "Jul", "Aug",
                "Sep", "Oct", "Nov", "Dec"
            ],
            year: '',
            time: ['Hours', 'Minutes', 'Seconds'],
            tools: {
                confirm: 'Confirm',
                clear: 'Clear',
                now: 'Now'
            }
        }
    };

}(window);

This snippet took 0.08 seconds to highlight.

Back to the Entry List or Home.

Delete this entry (admin only).