123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872 |
- /**
-
- @Name : layDate v1.1 日期控件
- @Author: 贤心
- @Date: 2014-06-25
- @QQ群:176047195
- @Site:http://sentsin.com/layui/laydate
-
- */
- ;!function(win){
- //全局配置,如果采用默认均不需要改动
- var config = {
- path: '', //laydate所在路径
- defSkin: 'default', //初始化皮肤
- format: 'YYYY-MM-DD', //日期格式
- min: '1900-01-01 00:00:00', //最小日期
- max: '2099-12-31 23:59:59', //最大日期
- isv: false
- };
- 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;
- 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.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)){
- 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.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));
-
- 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]);
- }
-
- 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]);
- 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[3]|0 || 0,
- Dates.inymd[4]|0 || 0,
- Dates.inymd[5]|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.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.initDate = function(){
- var S = Dates.query, log = {}, De = new Date();
- var ymd = Dates.elem[as.elemv].match(/\d+/g) || [];
- 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[0], ymd[1]-1, ymd[2]);
- };
- //是否显示零件
- 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 = tops + (pos ? 0 : Dates.scroll()) + '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);
-
- as.elemv = /textarea|input/.test(Dates.elem.tagName.toLocaleLowerCase()) ? 'value' : 'innerHTML';
-
- 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();
- 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);
- format = format || (Dates.options ? Dates.options.format : config.format);
- return format.replace(/YYYY|MM|DD|hh|mm|ss/g, function(str, index){
- ymd.index = ++ymd.index|0;
- return Dates.digit(ymd[ymd.index]);
- });
- };
- //返回最终日期
- 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.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);
- 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(){
- var now = new Date();
- 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.defSkin, 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];
- };
- }(window);
|