laydate源码解决时间是31号(即月大时候)直接跳过一个月(比如8月31号,直接到10月1号)跨过九月,源码有改动,只供参考

xiaoxiao2021-02-28  68

/**    @Name : layDate v1.1 日期控件  @Author: 贤心  @Date: 2014-06-25  @QQ群:176047195  @Site:http://sentsin.com/layui/laydate    */ ;!function(win){ //全局配置,如果采用默认均不需要改动 var config =  {     path: '', //laydate所在路径     skin: 'molv', //初始化皮肤     format: 'YYYY-MM-DD', //日期格式     min: '1900-01-01 00:00:00', //最小日期     max: '2099-12-31 23:59:59', //最大日期     isv: false,     init: true }; var Dates = {}, doc = document, creat = 'createElement', byid = 'getElementById', tags = 'getElementsByTagName'; 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 node = (Dates.trim(node)).split(' '), elemId = doc[byid](node[0].substr(1)), arr;     if(!elemId){         return;     } else if(!node[1]){         return elemId;     } else if(/^\./.test(node[1])){         var find, child = node[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[0] ? arr : '';     } else {         arr = elemId[tags](node[1]);         return arr[0] ? elemId[tags](node[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;     as.elemv = /textarea|input/.test(elem.tagName.toLocaleLowerCase()) ? 'value' : 'innerHTML';     //if (('init' in options ? options.init : config.init) && (!elem[as.elemv])) elem[as.elemv] = 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();                 }             });         });     }     chgSkin(options.skin || config.skin) }; 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 && year0 !== 0) || year@0 === 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)){             Dates.elem[as.elemv] = '';             Dates.msg('日期不符合格式,请重新选择。');             return 1;         } else if(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.checkDate = function( dateStr1, dateStr2 ){ var date1 = dateStr1.split("-"); //[0]year,[1]month,[2]date; var date2 = dateStr2.split("-"); //[0]year,[1]month,[2]date; if( date1[1] < 10 && date1[1].length < 2){ date1[1] = "0"+date1[1]; } if( date1[2] < 10 && date1[2].length < 2){ date1[2] = "0"+date1[2]; } if( date2[1] < 10 && date2[1].length < 2){ date2[1] = "0"+date2[1]; } if( date2[2] < 10 && date2[2].length < 2){ date2[2] = "0"+date2[2]; } date1 = date1.join("-"); date2 = date2.join("-"); return date1 == date2; } //得到某月的最后一天 Dates.getEndDate = function(month, year){     var thisDate = new Date();     //设置日期为下个月的第一天 thisDate.setFullYear(   year || thisDate.getFullYear()   ,month || (thisDate.getMonth() + 1) ,1); //减去一天,得到当前月最后一天     return new Date(thisDate.getTime() - 1000*60*60*24).getDate(); }; //生成日期 Dates.months = [31, null, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]; Dates.viewDate = function(Y, M, D){     var S = Dates.query, log = {}, De = new Date();     Y < (Dates.mins[0]|0) && (Y = (Dates.mins[0]|0));     Y > (Dates.maxs[0]|0) && (Y = (Dates.maxs[0]|0));          Dates.YY = De.getFullYear();     Dates.MM = Dates.digit(De.getMonth()+1);     Dates.DD = Dates.digit(De.getDate());     Dates.YYMMDD =  Dates.YY + "-" +  Dates.MM + "-" +  Dates.DD;          prevMaxDate = Dates.getEndDate(M, Y); //计算上个月的最后一天     thisMaxDate = Dates.getEndDate(M + 1, Y); //计算当前月的最后一天     if(D > thisMaxDate) {     D = thisMaxDate;     }     log.ymd = [Y, M, D];     //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.DATA = function(elem, YY, MM, DD){ var flag, DI;     var html = '';     var dataDateStr = YY + "-" + MM + "-" + DD;     //循环数据来渲染到日期上     for( var d in Dates.options.data ){     var nowDate = dataDateStr; var dataDate = Dates.options.data[d].date;  //检测时间是否一致 flag = Dates.checkDate(nowDate,dataDate); if(flag){ //判断所带参数是不是为0 if(Dates.options.data[d].data == "0"){   html += '<span class="more"><i>'+Dates.options.data[d].data+'</i></span>';                Dates.addClass(elem, as[1]);                //判断当前时间跟数据列表中时间是否有相同的                if(Dates.checkDate(Dates.YYMMDD, dataDate)){                 Dates.data = Dates.options.data[d].data;                } } else { html += '<span class="more"><i>'+Dates.options.data[d].data+'</i></span>'; //判断当前时间跟数据列表中时间是否有相同的                if(Dates.checkDate(Dates.YYMMDD, dataDate)){                 Dates.data = Dates.options.data[d].data;                } } DI = Dates.options.data[d].data; } }     if( !flag ){ html += '';         //判断当前时间选中天数跟日历显示选中当前时间是否相同         if(Dates.digit(DD) === Dates.digit(parseInt(Dates.DD))){         if(Dates.data == "0"){         Dates.addClass(as.otoday, as[1]);         } else {         Dates.removeClass(as.otoday, as[1]);         }         } }     return {"html":html,"DI":DI};     }     //渲染日     Dates.each(as.tds, function(i, elem){     var YY = parseInt(log.ymd[0]), MM = parseInt(log.ymd[1] + 1), DD, DI;         elem.className = '';         var html = '';         if(i < log.FDay){         DD = i + log.PDay;         Dates.addClass(elem, 'laydate_nothis');             MM === 1 && (YY -= 1);             MM = MM === 1 ? 12 : MM - 1;  html = Dates.DATA(elem, YY, MM, DD).html;         } else if(i >= log.FDay && i < log.FDay + Dates.months[log.ymd[1]]){         DD = i  - log.FDay + 1; html = Dates.DATA(elem, YY, MM, DD).html;         if(Dates.digit(DD) === Dates.digit(parseInt(log.ymd[2]))){         log.data = Dates.DATA(elem, YY, MM, DD).DI;         if(log.data == "0"){         Dates.addClass(elem, as[2]);         log.to = elem;         } else {         Dates.addClass(elem, as[2]);                 log.thisDay = elem;         }         }         } else {         DD = log.NDay++;             Dates.addClass(elem, 'laydate_nothis');             MM === 12 && (YY += 1);             MM = MM === 12 ? 1 : MM + 1;           html = Dates.DATA(elem, YY, MM, DD).html;         }         if(Dates.checkVoid(YY, MM, DD)[0]){             Dates.addClass(elem, as[1]);         }         elem.innerHTML = DD + html;         Dates.options.festival && Dates.festival(elem, MM + '.' + DD);         elem.setAttribute('y', YY);         elem.setAttribute('m', MM);         elem.setAttribute('d', DD);         YY = MM = DD = null;     });          //Dates.valid = !Dates.hasClass(log.thisDay, as[1]);//原始代码这里需要判断一下当前选中天数是否data数据为0     if(log.data == '0'){     Dates.valid = !Dates.hasClass(log.to, as[2]);     Dates[Dates.valid ? 'removeClass' : 'addClass'](as.ok, as[1]);     } else {     Dates.valid = !Dates.hasClass(log.thisDay, as[1]);     Dates[Dates.valid ? 'removeClass' : 'addClass'](as.ok, as[1]);     }               Dates.validDAy = !Dates.hasClass(as.otoday, as[1]);     Dates.ymd = log.ymd;          //锁定年月     as.year.value = Dates.ymd[0] + '年';     as.month.value = Dates.digit(Dates.ymd[1] + 1) + '月';          //定位月     Dates.each(as.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(as.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].value = 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[Dates.valid ? 'removeClass' : 'addClass'](as.otoday, as[1]); }; //节日 Dates.festival = function(td, md){     var str;     switch(md){         case '1.1':             str = '元旦';         break;         case '3.8':             str = '妇女';         break;         case '4.5':             str = '清明';         break;         case '5.1':             str = '劳动';         break;         case '6.1':             str = '儿童';         break;         case '9.10':             str = '教师';         break;         case '10.1':             str = '国庆';         break;     };     str && (td.innerHTML = str);     str = null; }; //生成年列表 Dates.viewYears = function(YY){     var S = Dates.query, str = '';     Dates.each(new Array(14), function(i){         if(i === 7) {             str += '<li '+ (parseInt(as.year.value) === YY ? 'class="'+ as[2] +'"' : '') +' y="'+ YY +'">'+ YY +'年</li>';         } else {             str += '<li y="'+ (YY-7+i) +'">'+ (YY-7+i) +'年</li>';         }     });      S('#laydate_ys').innerHTML = str;     Dates.each(S('#laydate_ys 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.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 tops, rect = Dates.elem.getBoundingClientRect();     obj.style.left = rect.left + (pos ? 0 : Dates.scroll(1)) + 'px';     if(rect.bottom + obj.offsetHeight/1.5 <= Dates.winarea()){         tops = rect.bottom - 1;              } else {         tops = rect.top > obj.offsetHeight/1.5 ? rect.top - obj.offsetHeight + 1 : Dates.winarea() - obj.offsetHeight;     }     obj.style.top = Math.max(tops + (pos ? 0 : Dates.scroll()),1) + 'px'; }; //吸附定位 Dates.follow = function(obj){     if(Dates.options.fixed){         obj.style.position = 'fixed';         Dates.orien(obj, 1);     } else {         obj.style.position = 'absolute';         Dates.orien(obj);     } }; //生成表格 Dates.viewtb = (function(){     var tr, view = [], weeks = [ '日', '一', '二', '三', '四', '五', '六'];     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.toLowerCase(); }()); //渲染控件骨架 Dates.view = function(elem, options){     var S = Dates.query, 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.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.style.cssText = 'position: absolute;';         div.setAttribute('name', 'laydate-v'+ laydate.v);                  div.innerHTML =  log.html = '<div class="laydate_top">'           +'<div class="laydate_ym laydate_y" id="laydate_YY">'             +'<a class="laydate_choose laydate_chprev laydate_tab"><cite></cite></a>'             +'<input id="laydate_y" readonly><label></label>'             +'<a class="laydate_choose laydate_chnext laydate_tab"><cite></cite></a>'             +'<div class="laydate_yms">'               +'<a class="laydate_tab laydate_chtop"><cite></cite></a>'               +'<ul id="laydate_ys"></ul>'               +'<a class="laydate_tab laydate_chdown"><cite></cite></a>'             +'</div>'           +'</div>'           +'<div class="laydate_ym laydate_m" id="laydate_MM">'             +'<a class="laydate_choose laydate_chprev laydate_tab"><cite></cite></a>'             +'<input id="laydate_m" readonly><label></label>'             +'<a class="laydate_choose laydate_chnext laydate_tab"><cite></cite></a>'             +'<div class="laydate_yms" id="laydate_ms">'+ function(){                 var str = '';                 Dates.each(new Array(12), function(i){                     str += '<span m="'+ i +'">'+ Dates.digit(i+1) +'月</span>';                 });                 return str;             }() +'</div>'           +'</div>'         +'</div>'                  + Dates.viewtb                  +'<div class="laydate_bottom">'           +'<ul id="laydate_hms">'             +'<li class="laydate_sj">时间</li>'             +'<li><input readonly>:</li>'             +'<li><input readonly>:</li>'             +'<li><input readonly></li>'           +'</ul>'           +'<div class="laydate_time" id="laydate_time"></div>'           +'<div class="laydate_btn">'             +'<a id="laydate_clear">清空</a>'             +'<a id="laydate_today">今天</a>'             +'<a id="laydate_ok">确认</a>'           +'</div>'           +(config.isv ? '<a href="http://sentsin.com/layui/laydate/" class="laydate_v" target="_blank">laydate-v'+ laydate.v +'</a>' : '')         +'</div>';         doc.body.appendChild(div);          Dates.box = S('#'+as[0]);                 Dates.events();         div = null;     } else {         Dates.shde(Dates.box);     }     Dates.follow(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].value, hms[1].value, hms[2].value]);     Dates.elem[as.elemv] = getDates;     if(!hide){         Dates.close();         typeof Dates.options.choose === 'function' && Dates.options.choose(getDates);      } }; //事件 Dates.events = function(){     var S = Dates.query, log = {         box: '#'+as[0]     };          Dates.addClass(doc.body, 'laydate_body');          as.tds = S('#laydate_table td');     as.mms = S('#laydate_ms span');     as.year = S('#laydate_y');     as.month = S('#laydate_m');     //显示更多年月     Dates.each(S(log.box + ' .laydate_ym'), function(i, elem){         Dates.on(elem, 'click', function(ev){             Dates.stopmp(ev).reshow();             Dates.addClass(this[tags]('div')[0], 'laydate_show');             if(!i){                 log.YY = parseInt(as.year.value);                 Dates.viewYears(log.YY);             }         });     });          Dates.on(S(log.box), 'click', function(){         Dates.reshow();     });          //切换年     log.tabYear = function(type){           if(type === 0){             Dates.ymd[0]--;         } else if(type === 1) {             Dates.ymd[0]++;         } else if(type === 2) {             log.YY -= 14;         } else {             log.YY += 14;         }         if(type < 2){             Dates.viewDate(Dates.ymd[0], Dates.ymd[1], Dates.ymd[2]);             Dates.reshow();         } else {             Dates.viewYears(log.YY);         }     };     Dates.each(S('#laydate_YY .laydate_tab'), function(i, elem){         Dates.on(elem, 'click', function(ev){             Dates.stopmp(ev);             log.tabYear(i);         });     });               //切换月     log.tabMonth = function(type){         if(type){             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.each(S('#laydate_MM .laydate_tab'), function(i, elem){         Dates.on(elem, 'click', function(ev){             Dates.stopmp(ev).reshow();             log.tabMonth(i);         });     });          //选择月     Dates.each(S('#laydate_ms span'), function(i, elem){         Dates.on(elem, 'click', function(ev){             Dates.stopmp(ev).reshow();             if(!Dates.hasClass(this, as[1])){             //Dates.options.data = [            // {date:'2019-07-30',data:'1'},            // {date:'2019-07-31',data:'1'}, // {date:'2019-07-12',data:'0'}, // {date:'2019-07-13',data:'0'}, // {date:'2019-09-11',data:'0'},            // {date:'2019-08-01',data:'1'}, // {date:'2019-08-16',data:'0'}, // {date:'2019-08-17',data:'1'}, // {date:'2019-08-13',data:'0'} //]             var yy = Dates.ymd[0];             var mm = Dates.digit(this.getAttribute('m')|0);             var rr = Dates.digit(Dates.ymd[2]);             var dayDATA = yy +"-"+mm+"-"+rr;             //laydate.ajaxData(dayDATA, Dates.options.url)                 Dates.viewDate(Dates.ymd[0], this.getAttribute('m')|0, Dates.ymd[2]);             }         });     });          //选择日     Dates.each(S('#laydate_table td'), function(i, elem){         Dates.on(elem, 'click', function(ev){             if(!Dates.hasClass(this, as[1])){                 Dates.stopmp(ev);                 //if(Dates.options.istime){                 //   Dates.viewDate([this.getAttribute('y')|0, (this.getAttribute('m')|0)-1, this.getAttribute('d')|0]);                //}else{                    Dates.creation([this.getAttribute('y')|0, this.getAttribute('m')|0, this.getAttribute('d')|0]);               //}             }         });     });          //清空     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(){     if(Dates.validDAy ){     var now = new Date();        // 2016-09-23 18:20:54 修复选中今天choose方法得不到数据        // Dates.creation([now.getFullYear(), now.getMonth() + 1, now.getDate()]);        // 2016-09-26 10:49:25 修复选中今天 如果YYYY-MM-DD hh:mm:ss格式,获取当前的时分秒        var hms = Dates.hmsin;        var date = new Date();        // 获取当前时间小时        hms[0].value = date.getHours();        // 获取当前时间分钟        hms[1].value = date.getMinutes();        // 获取当前时间秒        hms[2].value = date.getSeconds();        Dates.creation([now.getFullYear(), now.getMonth() + 1, now.getDate()]); }     });          //确认     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');     Dates.hmsin = log.hmsin = S('#laydate_hms input');     log.hmss = ['小时', '分钟', '秒数'];     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.removeClass(log.times, 'laydate_time1').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_time1');         }         Dates.addClass(log.times, 'laydate_show');         log.times.innerHTML = str;     };          log.hmson = function(input, 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])){                         input.value = Dates.digit(this.innerHTML|0);                     }                 });             }          });         Dates.addClass(span[input.value|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(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.destroy = function(){ Dates.box = null; Dates.d = null } //ajax请求数据 laydate.ajaxData = function(data, url){ $.ajax({         dataType:'json',         url : url,         data: data,         async:true,//这里选择异步为false,那么这个程序执行到这里的时候会暂停,等待//数据加载完成后才继续执行         success : function(data){             data = data;         },         error: function(XMLHttpRequest, textStatus, errorThrown){         if (XMLHttpRequest.status === 0) { alert("网络异常,请检查您的网络!"); } else if (XMLHttpRequest.status === 404) { alert("请求路径不存在,请联系管理员解决!"); } else if (XMLHttpRequest.status === 500) { alert("服务器异常,请联系管理员解决!"); }         }     }); return data; } //返回指定日期 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 = chgSkin; //内部函数 function chgSkin(lib) {     Dates.skinLink.href = Dates.getPath + as[4] + lib + as[5]; }; }(window);
转载请注明原文地址: https://www.6miu.com/read-83823.html

最新回复(0)