/** @Name : jeDate v6.0.0 日期控件 @Author: chen guojun @Date: 2017-09-06 @QQ群:516754269 @官网:http://www.jemui.com/ 或 https://github.com/singod/jeDate 或 http://www.jq22.com/jquery-info6110 */ ;(function(root, factory) { //amd if (typeof define === 'function' && define.amd) { define(['jquery'], factory); } else if (typeof exports === 'object') { //umd module.exports = factory(); } else { root.jeDate = factory(); } })(this, function() { var jet = {}, doc = document, regymdzz = "YYYY|MM|DD|hh|mm|ss|zz", gr = /\-/g, regymd = "YYYY|MM|DD|hh|mm|ss|zz".replace("|zz",""), parseInt = function (n) { return window.parseInt(n, 10);}, config = { skinCell:"jedateblue", language:{ name : "cn", month : ["01", "02", "03", "04", "05", "06", "07", "08", "09", "10", "11", "12"], weeks : [ "日", "一", "二", "三", "四", "五", "六" ], times : ["小时","分钟","秒数"], titText: "请选择日期时间", clear : "清空", today : "现在", yes : "确定", close : "关闭" }, range:false, trigger:"click", format:"YYYY-MM-DD hh:mm:ss", //日期格式 minDate:"1900-01-01 00:00:00", //最小日期 maxDate:"2099-12-31 23:59:59" //最大日期 }; $.fn.jeDate = function(options){ return new jeDate($(this),options||{}); }; $.extend({ jeDate:function(elem, options){ return new jeDate($(elem),options||{}); } }); jet.isObj = function (obj){ for(var i in obj){return true;} return false; }; jet.reMatch = function (str) { return str.match(/\w+|d+/g); }; jet.docScroll = function(type) { type = type ? "scrollLeft" :"scrollTop"; return document.body[type] | document.documentElement[type]; }; jet.docArea = function(type) { return document.documentElement[type ? "clientWidth" :"clientHeight"]; }; //判断是否闰年 jet.isLeap = function(y) { return (y % 100 !== 0 && y % 4 === 0) || (y % 400 === 0); }; //补齐数位 jet.digit = function(num) { return num < 10 ? "0" + (num | 0) :num; }; //判断是否为数字 jet.isNum = function(value){ return /^[+-]?\d*\.?\d*$/.test(value) ? true : false; }; //获取本月的总天数 jet.getDaysNum = function(y, m) { var num = 31; switch (parseInt(m)) { case 2: num = jet.isLeap(y) ? 29 : 28; break; case 4: case 6: case 9: case 11: num = 30; break; } return num; }; //获取月与年 jet.getYM = function(y, m, n) { var nd = new Date(y, m - 1); nd.setMonth(m - 1 + n); return { y: nd.getFullYear(), m: nd.getMonth() + 1 }; }; //获取上个月 jet.prevMonth = function(y, m, n) { return jet.getYM(y, m, 0 - (n || 1)); }; //获取下个月 jet.nextMonth = function(y, m, n) { return jet.getYM(y, m, n || 1); }; //转换日期格式 jet.parse = function(ymdhms, format) { return format.replace(new RegExp(regymdzz,"g"), function(str, index) { return str == "zz" ? "00":jet.digit(ymdhms[str]); }); }; jet.isparmat = function(format) { var remat = jet.reMatch(format), mat = regymdzz.split("|"), tmpArr = []; $.each(mat,function (m,mval) { $.each(remat,function (r,rval) { if (mval == rval) tmpArr.push(rval); }); }); return tmpArr.join("-"); }; jet.parseOld = function(ymd, hms, format) { ymd = ymd.concat(hms); var ymdObj = {}, mat = regymdzz.split("|"), remat = jet.reMatch(format); $.each(ymd,function (i,val) { ymdObj[remat[i]] = parseInt(val); }); return format.replace(new RegExp(regymdzz,"g"), function(str, index) { return str == "zz" ? "00":jet.digit(ymdObj[str]); }); }; //验证日期格式 jet.checkFormat = function(format) { var ymdhms = []; format.replace(new RegExp(regymdzz,"g"), function(str, index) { ymdhms.push(str); }); return ymdhms.join("-"); }; jet.splMatch = function(str) { var timeArr = str.split(" "); return jet.reMatch(timeArr[0]); }; jet.mlen = function (format) { var matlen = format.match(/\w+|d+/g).length, mathh = (format.substring(0, 2) == "hh"), lens = mathh&&matlen<=3 ? 7 : matlen; return lens; }; //验证日期 jet.checkDate = function (date) { var dateArr = jet.reMatch(date); if (isNaN(dateArr[0]) || isNaN(dateArr[1]) || isNaN(dateArr[2])) return false; if (dateArr[1] > 12 || dateArr[1] < 1) return false; if (dateArr[2] < 1 || dateArr[2] > 31) return false; if ((dateArr[1] == 4 || dateArr[1] == 6 || dateArr[1] == 9 || dateArr[1] == 11) && dateArr[2] > 30) return false; if (dateArr[1] == 2) { if (dateArr[2] > 29) return false; if ((dateArr[0] % 100 == 0 && dateArr[0] % 400 != 0 || dateArr[0] % 4 != 0) && dateArr[2] > 28) return false; } return true; }; //返回日期 jet.reSetDate = function (obj,date,format) { date = date || {}; format = format || 'YYYY-MM-DD hh:mm:ss'; var ndate = new Date(), narr = [], matArr = {YYYY:"FullYear",MM:"Month",DD:"Date",hh:"Hours",mm:"Minutes",ss:"Seconds"}, dateY = date.YYYY == undefined ? ndate.getFullYear():date.YYYY,dateM = date.MM == undefined ? ndate.getMonth()+1:date.MM, dateD = date.DD == undefined ? ndate.getDate():date.DD, timeh = date.hh == undefined ? ndate.getHours():date.hh, timem = date.mm == undefined ? ndate.getMinutes():date.mm,times = date.ss == undefined ? ndate.getSeconds():date.ss, newDate = new Date(dateY,dateM,dateD,timeh,timem,times), isDay31; for(k in obj){ if (obj.hasOwnProperty(k)) narr.push(k) }; $.each(["ss","mm","hh","DD","MM","YYYY"],function (i,mat) { $.each(narr,function (n,val) { isDay31 = newDate["get"+matArr[mat]]() == 31; var gval = isDay31 ? (newDate["get"+matArr[mat]]() - 1) : newDate["get"+matArr[mat]](), oVal = parseInt(obj[mat]),nval; if (mat == 'MM'){ nval = gval+(oVal) > 11 ? gval+(oVal)-1:gval+(oVal); }else{ nval = gval+(oVal); } if(val == mat) newDate["set"+matArr[mat]](nval); }) }); var reMonth = newDate.getMonth()==11?newDate.getMonth()+1:newDate.getMonth(); var reParse = jet.parse({YYYY:newDate.getFullYear(), MM:jet.digit(reMonth), DD:isDay31 ? newDate.getDate()+1:newDate.getDate() , hh:jet.digit(newDate.getHours()), mm:jet.digit(newDate.getMinutes()), ss:jet.digit(newDate.getSeconds()) }, format); return reParse; }; //判断元素类型 jet.isValHtml = function(elem) { return /textarea|input/.test(elem[0].tagName.toLocaleLowerCase()); }; jet.isBool = function(obj){ return (obj == undefined || obj == true ? true : false); }; var searandom = function (){ var str = "",arr = [1,2,3,4,5,6,7,8,9,0]; for(var i=0; i<8; i++) str += arr[Math.round(Math.random() * (arr.length-1))]; return str; }; function jeDate(elem, opts){ this.opts = opts; this.valCell = elem; this.format = this.opts.format; this.initdates(); } var jedfn = jeDate.prototype, jefix = "jefixed",matArr = jet.reMatch(regymdzz); jedfn.initdates = function(){ var that = this, opts = that.opts, newDate = new Date(), jetrigger = opts.trigger != undefined ? opts.trigger : config.trigger, zIndex = opts.zIndex == undefined ? 10000 : opts.zIndex, isinitVal = (opts.isinitVal == undefined || opts.isinitVal == false) ? false : true; var randomCell = "#jedatebox"+searandom(),isShow = jet.isBool(opts.isShow); that.areaVal = []; opts.range = opts.range || config.range; that.fixed = jet.isBool(opts.fixed); var formatDate = function (cls,boxcell) { var dateDiv = $("
",{"id":boxcell.replace(/\#/g,""),"class":"jedatebox "+(opts.skinCell || config.skinCell)}), reabsfix = !isShow ? "relative" : (that.fixed == true ? "absolute" :"fixed"); dateDiv.attr("author","chen guojun").css({"z-index": boxcell != "#jedatebox" ? "" : zIndex ,"position":reabsfix}); if(boxcell != "#jedatebox") dateDiv.attr({"jeformat":opts.format || config.format,"jefixed":randomCell}); var min = config.minDate.split(" "), max = config.maxDate.split(" "); jet.minDate = (!/\-/g.test(opts.minDate)&&opts.minDate!=undefined ? min[0]+" "+opts.minDate : opts.minDate) || config.minDate; jet.maxDate = (!/\-/g.test(opts.maxDate)&&opts.maxDate!=undefined ? max[0]+" "+opts.maxDate : opts.maxDate) || config.maxDate; jet.boxelem = !isShow ? boxcell : "#jedatebox"; that.format = !isShow ? dateDiv.attr("jeformat") : (opts.format || config.format); var vals = that.getValue({}); $(cls).append(dateDiv); that.renderHtml(vals[0].YYYY, vals[0].MM,vals[0].DD, opts,jet.boxelem); }; //为开启初始化的时间设置值 if (isinitVal && jetrigger) { //opts.range = undefined; var ndate = opts.initDate || [], reVal; if (ndate[1]){ var addval = jet.reMatch(jet.reSetDate(ndate[0])); reVal = [{YYYY:addval[0], MM:jet.digit(addval[1]), DD:jet.digit(addval[2]) , hh:jet.digit(addval[3]), mm:jet.digit(addval[4]), ss:jet.digit(addval[5]) }]; }else { reVal = that.getValue(jet.isObj(ndate[0]) ? ndate[0] : {}); } that.setValue(reVal[0],opts.format || config.format); } //判断固定元素是否存在 if(!isShow){ formatDate(that.valCell,randomCell); }else { //insTrigger的值为true时内部默认点击事件 var jd = ["body","#jedatebox"]; if (jetrigger) { that.valCell.on(jetrigger, function (ev) { ev.stopPropagation(); if ($(jd[1]).length > 0) return; formatDate(jd[0],jd[1]); }); }else { formatDate(jd[0],jd[1]); } } }; jedfn.parseFormat = function(ymdhms,format) { return jet.parse(ymdhms,format); }; //转换日期值 jedfn.parseValue = function (fnStr,matStr) { var that = this, valArr=[],opts = that.opts, setVal = "",elm = $(jet.boxelem), formats = matStr == undefined ? ($(elm.attr(jefix)).length > 0 ? elm.attr("jeformat") : that.format) : matStr, dateStr = $.isFunction(fnStr) ? fnStr() : fnStr; if (dateStr != "" || dateStr.length > 0 ){ var unrange = opts.range != false, rangeArr = new Array(unrange ? 2 : 1); $.each(rangeArr,function (i) { var rangLen = rangeArr.length == 2,ymdObj = {},parmat = jet.reMatch(formats), ranArr = rangLen ? dateStr.split(opts.range) : dateStr; if (rangLen){ $.each(jet.reMatch(ranArr[i]),function (r,val) { ymdObj[jet.mlen(that.format) == 7 ? parmat[r] : matArr[r]] = val; }); } valArr.push(that.parseFormat((rangLen ? ymdObj : ranArr), formats)); ymdObj = {}; }); setVal = valArr.join(unrange ? opts.range : ""); } return setVal; }; //设置日期值 jedfn.setValue = function (fnStr,matStr,bool) { var that = this, elCell = that.valCell,strVal; if((typeof fnStr=='string')&&fnStr!=''&&that.opts.range == false){ var reVal = jet.reMatch(fnStr), inObj={}; $.each(jet.reMatch(that.format),function (r,val) { inObj[val] = parseInt(reVal[r]); }); strVal = inObj; }else { strVal = fnStr; } var type = jet.isValHtml(elCell) ? "val" : "text", vals = that.parseValue(strVal,matStr); if (bool != false) elCell[type](vals); return vals; }; //获取日期值 jedfn.getValue = function (valobj) { var that = this, objCell = that.valCell, opts = that.opts, date = new Date(), reObj, dateY = date.getFullYear(),dateM = date.getMonth(),dateD = date.getDate(), timeh = date.getHours(),timem = date.getMinutes(),times = date.getSeconds(); if (valobj == undefined && jet.isBool(opts.isShow)){ var type = jet.isValHtml(objCell) ? "val" : "text"; reObj = objCell[type](); }else { var isValShow = jet.isBool(opts.isShow) ? (that.getValue() == "") : !jet.isBool(opts.isShow), objarr = $.extend({YYYY:null,MM:null,DD:null},valobj||{}), ranMat = [],newArr = new Array(2),unObj = function (obj) { return [(objarr[obj] == undefined || objarr[obj] == null),objarr[obj]] }, defObj = [{ YYYY:dateY,MM:dateM,DD:dateD, hh:timeh,mm:timem,ss:times,zz:00}, { YYYY:dateY,MM:dateM,DD:dateD, hh:timeh,mm:timem,ss:times,zz:00}]; if (isValShow) { //目标为空值则获取当前日期时间 $.each(newArr,function (i) { var inObj = {}; $.each(matArr, function (r, val) { inObj[val] = parseInt(unObj(val)[0] ? (val == "MM" ? defObj[i][val] + 1 : defObj[i][val]) : unObj(val)[1]); }); ranMat.push($.extend(defObj[i], inObj)); }); } else { var isunRange = opts.range != false, initVal = that.getValue(), spVal = initVal.split(opts.range), reMat = jet.reMatch(that.format); $.each(newArr,function (i) { var inObj = {}, reVal = isunRange ? jet.reMatch(spVal[i]) : jet.reMatch(initVal); $.each(reMat,function (r,val) { inObj[val] = parseInt(reVal[r]); }); var exVal = $.extend(inObj,valobj||{}); ranMat.push($.extend(defObj[i],exVal)); }); } reObj = ranMat; } return reObj; }; //布局控件骨架 jedfn.renderHtml = function(ys, ms, ds, opts,boxcls){ var that = this, boxCell = $(boxcls), lang = opts.language || config.language, isrange = opts.range != false, isShow = jet.isBool(opts.isShow); var minTime = jet.minDate.replace(/\s+/g," ").split(" "), maxTime = jet.maxDate.replace(/\s+/g," ").split(" "), allvals = that.getValue({YYYY:ys,MM:ms,DD:ds}), vals = allvals[0], valx = allvals[1]; that.format = isShow ? that.format : boxCell.attr("jeformat"); var mlens = jet.mlen(that.format), testhh = /\hh/.test(that.format); var clearTxt = lang.name == "cn" ? (!isShow ? "重置":lang.clear):(!isShow ? "Reset":lang.clear); var headcon = "", artcont = $("",{"class":"maincont"}), footer = $("",{"class":"mainfoot"}), daycon = $("",{"class":"daybox"}).append(headcon), ymscon = $("",{"class":"ymsbox"}).append(headcon), timecon = $("",{"class":"timebox"}).append(headcon); artcont.append(ymscon).append(daycon).append(mlens==1||mlens==2?"":timecon); boxCell.empty().append(artcont.children().hide()).append(footer); var timeStr = function () { var emStr = '::'; return isrange ? emStr +" ~ "+ emStr : emStr; }, btnStr = ''+clearTxt+''+lang.today+''+lang.yes+'', timeDiv = $("",{"class":"timecon"}).append(timeStr()), btnsDiv = $("",{"class":"btnscon"}).append(btnStr); footer.append(timeDiv).append(btnsDiv); boxCell.append($("",{"class":"jedate-tips"}).hide()); that.maincon = function (elem,is) { return boxCell.find(elem+" > "+(is == 0 ? ".arthead":".artcont")); }; //设置时分秒 if (testhh) { var minVal = /\s/.test(jet.minDate) ? minTime[1] : minTime[0], maxVal = /\s/.test(jet.maxDate) ? maxTime[1] : maxTime[0]; var rehms = jet.reMatch(minVal), vehms = [vals.hh, vals.mm, vals.ss], hms = []; if (isrange) { if (that.getValue() == "") { hms = mlens == 7 ? rehms.concat(rehms) : rehms.concat([00, 00, 00]); } else { hms = vehms.concat([valx.hh, valx.mm, valx.ss]); } }else { hms = vehms; } $.each(footer.find(".timecon em"), function (i, cls) { $(this).text(jet.digit(hms[i])); }); }else { footer.find(".timecon").hide(); } //根据日期格式进行对应的日期时间显示 if(mlens == 7){ that.maincon(".timebox",0).html(lang.titText); boxCell.find(".timebox").show(); that.eachHms(opts,boxCell); }else if(mlens>=3 && mlens<=6){ that.maincon(".daybox",0).append(''); boxCell.find(".daybox").show(); that.eachDays(vals.YYYY, vals.MM, vals.DD, opts, boxCell); //判断日期格式中是否包含hh(时) if(testhh){ that.maincon(".timebox",1).attr("cont","no"); that.maincon(".timebox",0).html(lang.titText+''); boxCell.find(".timecon").on("click",function () { if (that.maincon(".timebox",1).attr("cont") == "no"){ that.maincon(".timebox",1).attr("cont","yes"); boxCell.find(".ymsbox,.daybox").hide(); boxCell.find(".timebox").show(); that.eachHms(opts,boxCell); that.dateOrien(boxCell, that.valCell); } }); that.maincon(".timebox",0).on("click",".close",function () { that.maincon(".timebox",1).html("").attr("cont","no"); boxCell.find(".ymsbox,.timebox").hide(); boxCell.find(".daybox").show(); that.dateOrien(boxCell, that.valCell); }); timeDiv.css({"cursor":"pointer"}); } //将所有子元素用一个生成的div将所有段落包裹起来 that.maincon(".ymsbox",0).append('').addClass("ymfix"); //将生成的年月插入到元素中 that.eachYM(vals.YYYY, vals.MM, opts, boxCell,".fixcon"); } //为年月的情况下执行 if(mlens==1 || mlens==2){ that.maincon(".ymsbox",0).append(''); boxCell.find(".ymsbox").show(); that.eachYM(vals.YYYY, vals.MM, opts, boxCell,".jedate-cont"); } //是否开启时间选择 if(!jet.isBool(opts.isTime) || !isShow){ footer.find(".timecon").hide(); } if(!isShow) footer.find(".today").hide(); //绑定各个事件 that.eventsDate(opts,boxCell); setTimeout(function () { opts.success && opts.success(boxCell); }, 50); }; jedfn.createYMHtml = function(ys, ms, opts){ var year = parseInt(ys), month = parseInt(ms), headCls = this.maincon(".daybox",0); var ymCls = $("").css({"width":jet.isBool(opts.multiPane) ? '':'50%'}), ymText = ""+month+"\u6708 "+year+"\u5e74"; headCls.append(ymCls.html(ymText)); return year+"-"+month; }; //循环生成年或月 jedfn.eachYM = function(y, m,opts,boxCell,clsCell) { var that = this, yearArr = new Array(15), date = new Date(), lang = opts.language || config.language, ymscon = that.maincon(".ymsbox",1), multiPane = jet.isBool(opts.multiPane), mlens = jet.mlen(that.format), ymarr = that.getValue({}),testhh = /\hh/.test(that.format), formatYY = mlens == 1; if(ymscon.find(".ymcon").length > 0) ymscon.find(".ymcon").remove(); $.each(new Array(multiPane ? 1 : 2),function (s) { var retSetCls = function (sym,gym,eym) { var sval = sym.replace(gr,""), gval = gym.replace(gr,""), eval = eym.replace(gr,""); if (/YYYY-MM-DD/g.test(jet.isparmat(that.format))){ return (parseInt(sval) == parseInt(gval)) ? (s == 0 ? "actdate" : "") : ""; }else { if (parseInt(sval) == parseInt(gval)) { if (!testhh) { that.areaVal.push(sym); that.areaStart = true; } return "actdate"; } else if (parseInt(sval) > parseInt(gval) && parseInt(sval) < parseInt(eval)) { return "contain"; } else if (parseInt(sval) == parseInt(eval)) { if (!testhh) { that.areaVal.push(sym); that.areaStart = true; } return "actdate"; } else { return ""; } } }; var ymDiv = $("",{"class":"ymcon"}).addClass(s==1 ? "spaer":""),ymArr=[]; $.each(formatYY ? yearArr : lang.month, function (n, val) { var ym = s==1 ? y + (formatYY ? yearArr.length : 1) : y,seCls; n = s==1 ? (formatYY ? 15+n : 12+n) : n; if (formatYY) { var minArr = jet.splMatch(jet.minDate), maxArr = jet.splMatch(jet.maxDate), minY = minArr[0], maxY = maxArr[0], year = (ym - 7 + n), getyear = (that.getValue() == "" && jet.isBool(opts.isShow)) ? date.getFullYear() : that.getValue(); //判断是否在有效期内 if (year < minY || year > maxY) { ymArr.push({style:"disabled",ym: year,idx:n}); } else { seCls = retSetCls(year.toString(),getyear.toString(),ymarr[1].YYYY.toString()); ymArr.push({style:seCls,ym: year,idx:n}); } } else { var minArr = jet.splMatch(jet.minDate), maxArr = jet.splMatch(jet.maxDate), thisDate = parseInt(ym+""+jet.digit(val)+""+"01"), minTime = parseInt(minArr[0]+""+jet.digit(minArr[1])+""+jet.digit(minArr[2])), maxTime = parseInt(maxArr[0]+""+jet.digit(maxArr[1])+""+jet.digit(maxArr[2])); //判断是否在有效期内 if (thisDate < minTime || thisDate > maxTime) { ymArr.push({style:"disabled",ym: ym + "-" + jet.digit(val),idx:n}); } else { var ymVal = ym + "-" + jet.digit(val),ymmVal = ymarr[0].YYYY+ "-" + jet.digit(ymarr[0].MM); seCls = retSetCls(ymVal,ymmVal,(ymarr[1].YYYY+ "-" + jet.digit(ymarr[1].MM))); ymArr.push({style:seCls,ym: ym + "-" + jet.digit(val),idx:n}); } } }); var table = $('"+sval+" ~ "+eval+"
").attr({min:mnx[0],max:mnx[1]}); }; //初始验证正则 jedfn.dateRegExp = function(valArr) { var enval = valArr.split(",")||[], re = ""; var doExp = function (val) { var arr, tmpEval, re = /#?\{(.*?)\}/; val = val + ""; while ((arr = re.exec(val)) != null) { arr.lastIndex = arr.index + arr[1].length + arr[0].length - arr[1].length - 1; tmpEval = parseInt(eval(arr[1])); if (tmpEval < 0) tmpEval = "9700" + -tmpEval; val = val.substring(0, arr.index) + tmpEval + val.substring(arr.lastIndex + 1); } return val; }; if (enval && enval.length > 0) { for (var i = 0; i < enval.length; i++) { re += doExp(enval[i]); if (i != enval.length - 1) re += "|"; } re = re ? new RegExp("(?:" + re + ")") : null; } else { re = null; } //re = new RegExp((re + "").replace(/^\/\(\?:(.*)\)\/.*/, "$1")); return re; }; //循环生成日 jedfn.eachDays = function(ys, ms,ds, opts, boxCell){ var that = this, isShow = jet.isBool(opts.isShow); var year = parseInt(ys), month = parseInt(ms), objCell = that.valCell, lang = opts.language || config.language, endval = opts.valiDate||[], minArr = jet.reMatch(jet.minDate), minNum = parseInt(minArr[0]+""+jet.digit(minArr[1])+""+jet.digit(minArr[2])), maxArr = jet.reMatch(jet.maxDate), maxNum = parseInt(maxArr[0]+""+jet.digit(maxArr[1])+""+jet.digit(maxArr[2])); var multiPane = jet.isBool(opts.multiPane), ymdarr = that.getValue(!isShow ? {YYYY:ys,MM:ms,DD:ds}:{}), valrange = ((objCell.val() || objCell.text()) != "") && opts.range != false, ymdDate = parseInt(ymdarr[0].YYYY+""+jet.digit(ymdarr[0].MM)+""+jet.digit(ymdarr[0].DD)); //设置时间标注 var setMark = function (my, mm, md) { var Marks = opts.marks, contains = function(arr, obj) { var len = arr.length; while (len--) { if (arr[len] === obj) return true; } return false; }; return $.isArray(Marks) && Marks.length > 0 && contains(Marks, my + "-" + jet.digit(mm) + "-" + jet.digit(md)) ? '' :""; }; //是否显示节日 var isfestival = function(y, m ,d) { var festivalStr; if(opts.festival == true && lang.name == "cn"){ var lunar = jeLunar(y, m - 1, d), feslunar = (lunar.solarFestival || lunar.lunarFestival), lunartext = (feslunar && lunar.jieqi) != "" ? feslunar : (lunar.jieqi || lunar.showInLunar); festivalStr = '' + d + '' + lunartext + '
'; }else{ festivalStr = '' + d + '
'; } return festivalStr; }; //判断是否在限制的日期之中 var dateLimit = function(Y, M, D, isMonth){ var thatNum = parseInt(Y + "" + jet.digit(M) + "" + jet.digit(D)); if(isMonth){ if (thatNum >= minNum && thatNum <= maxNum) return true; }else { if (minNum > thatNum || maxNum < thatNum) return true; } }; var eachDays = function (yd,md) { var count = 0, daysArr = [], firstWeek = new Date(yd, md - 1, 1).getDay() || 7, daysNum = jet.getDaysNum(yd, md), didx = 0, prevM = jet.prevMonth(yd, md), prevDaysNum = jet.getDaysNum(yd, prevM.m), nextM = jet.nextMonth(yd, md); //上一月剩余天数 for (var p = prevDaysNum - firstWeek + 1; p <= prevDaysNum; p++, count++) { var pmark = setMark(prevM.y,prevM.m,p); var cls = dateLimit(prevM.y, prevM.m, p, false) ? "disabled" : "other"; daysArr.push({style:cls,ymd:prevM.y+'-'+prevM.m+'-'+p,day:p,d:(isfestival(prevM.y,prevM.m,p) + pmark),idx:didx++}); } //本月的天数 for(var b = 1; b <= daysNum; b++, count++){ var bmark = setMark(yd,md,b), cls = ""; var dateval = parseInt(yd+""+jet.digit(md)+""+jet.digit(b)), rangval = parseInt(ymdarr[1].YYYY+""+jet.digit(ymdarr[1].MM)+""+jet.digit(ymdarr[1].DD)), parsdate = dateval > ymdDate, rangdate = dateval < rangval; if(dateLimit(yd, md, b, true)){ if(dateval == ymdDate){ cls = "actdate"; that.areaVal.push(yd+'-'+jet.digit(md)+'-'+jet.digit(b)); that.areaStart = true; }else if(parsdate&&rangdate&&valrange){ cls = "contain"; }else if((dateval == rangval)&&valrange){ cls = "actdate"; that.areaVal.push(yd+'-'+jet.digit(md)+'-'+jet.digit(b)); that.areaEnd = true; }else { cls = ""; } }else { cls = "disabled"; } daysArr.push({style:cls,ymd:yd+'-'+md+'-'+b,day:b,d:(isfestival(yd,md,b) + bmark),idx:didx++}); } //下一月开始天数 for(var n = 1, nlen = 42 - count; n <= nlen; n++){ var nmark = setMark(nextM.y,nextM.m,n); var cls = dateLimit(nextM.y, nextM.m, n, false) ? "disabled" : "other"; daysArr.push({style:cls,ymd:nextM.y+'-'+nextM.m+'-'+n,day:n,d:(isfestival(nextM.y,nextM.m,n) + nmark),idx:didx++}); } //将星期与日期拼接起来 return daysArr; }; var valdigit = function (val) { var spval = jet.reMatch(val) , rearr = []; $.each(spval,function (i,v) { rearr.push(jet.digit(v)); }); return rearr.join("-"); }; var moreArr = new Array(multiPane ? 1 : 2), isDec = (month + 1 > 12),ymarr = []; $.each(moreArr,function (d,val) { var table = $(''+lang.times[0]+'
'+lang.times[1]+'
'+lang.times[2]+'
'); timeList.append(timetxt); hmsCell.addClass(m==1 ? "spaer":""); $.each([24, 60, 60],function (i,lens) { var hmsCls = "",tuls = $("' + lunar.solarYear + '\u5E74' + lunar.solarMonth + '\u6708' + lunar.solarDate + '\u65E5 ' + lunar.inWeekDays + '
\u519C\u5386:' + lunar.shengxiao + '\u5E74 ' + lunar.lnongMonth + '\u6708' + lunar.lnongDate + '
' + lunar.ganzhiYear + '\u5E74 ' + lunar.ganzhiMonth + '\u6708 ' + lunar.ganzhiDate + '\u65E5
'; var Fesjieri = (lunar.solarFestival || lunar.lunarFestival) != "" ? '' + ("\u8282\u65E5:"+lunar.solarFestival + lunar.lunarFestival) + '
' : ""; var Fesjieqi = lunar.jieqi != "" ? ''+(lunar.jieqi != "" ? "\u8282\u6C14:"+lunar.jieqi : "") + '
': ""; var tiptext = (lunar.solarFestival || lunar.lunarFestival || lunar.jieqi) != "" ? (Fesjieri + Fesjieqi) : ""; //生成提示框到文档中 $("body").append(tipDiv); tipDiv.html(tiphtml + tiptext); //获取并设置农历提示框出现的位置 var tipPos = jedfn.lunarOrien(tipDiv, _this); tipDiv.css({"z-index": (opts.zIndex == undefined ? 10000 + 5 : opts.zIndex + 5),top:tipPos.top,left:tipPos.left,position:"absolute",display:"block"}); }).on( "mouseout", function () { //鼠标移除提示框消失 $("#jedatetipscon").remove(); }); } }; jedfn.clickBtn = function (opts,boxCell) { var that = this, elemCell = that.valCell, isShow = jet.isBool(opts.isShow), ishhmat = jet.mlen(that.format) == 7, multiPane = jet.isBool(opts.multiPane), isYYMM = jet.mlen(that.format) == 2, isYY = jet.mlen(that.format) == 1; //清空按钮清空日期时间 boxCell.on("click",".clear", function(ev) { ev.stopPropagation(); if (isShow){ var type = jet.isValHtml(that.valCell) ? "val" : "text", gtval = that.valCell[type](), clearVal = that.setValue(""); that.dateClose(); if (gtval != "") { if (jet.isBool(opts.clearRestore)){ jet.minDate = opts.startMin || jet.minDate; jet.maxDate = opts.startMax || jet.maxDate; } if ($.isFunction(opts.clearfun) || opts.clearfun != null) opts.clearfun({elem:elemCell,val:clearVal}); } }else { var cdate = that.getValue({}); that.renderHtml(cdate[0].YYYY, cdate[0].MM,cdate[0].DD, opts,boxCell); } if(opts.range != false) that.delAreaAttr(); }); //今天(现在)按钮设置日期时间 if(opts.range != false) boxCell.find(".today").hide(); boxCell.on("click",".today", function() { var xDate = new Date(), objVal = { YYYY:xDate.getFullYear(), MM:jet.digit(xDate.getMonth() + 1), DD:jet.digit(xDate.getDate()), hh:jet.digit(xDate.getHours()), mm:jet.digit(xDate.getMinutes()), ss:jet.digit(xDate.getSeconds()) }; var thisdate = that.setValue(objVal); that.dateClose(); if ($.isFunction(opts.okfun) || opts.okfun != null) opts.okfun({elem:elemCell,val:thisdate,date:objVal}); }); //确认按钮设置日期时间 boxCell.on("click",".setok", function(ev) { ev.stopPropagation(); var sDate = new Date(),okVal,valdate,objVal; if(opts.range == false){ var hmsVal = that.gethmsVal(boxCell), dateVal = function () { var ymdObj = {}, ymday = (isYYMM || isYY) ? ".ymcon":".daysul", spval = jet.reMatch(boxCell.find(ymday).find("td.actdate").attr("je-val")); $.each(spval,function (i,val) { ymdObj[matArr[i]] = val; }); var objVal = /\hh/.test(that.format) ? $.extend(ymdObj,hmsVal) : ymdObj; return objVal; }; okVal = ishhmat ? hmsVal : dateVal(); }else { var newobj = {}, newarea = [], hmsArr=[[],[]]; boxCell.find(".timecon em").each(function(i) { var disab = $(this).attr('disabled'); if(disab == undefined){ hmsArr[i>2 ? 1 : 0].push($(this).text()); } }); if (jet.mlen(that.format) == 7){ if (opts.range != false){ $.each(hmsArr,function (i,val) { var group = val.join(""); newobj[group] = val.join(":"); newarea.push(group); }); } }else { $.each(that.areaVal, function (n, val) { var group = val + (/\hh/.test(that.format) ? " " + hmsArr[n].join(":") : ""); var repgroup = group.replace(/\s|-|:/g, ""); newobj[repgroup] = group; newarea.push(repgroup); }); } var minVal = Math.min.apply(null, newarea), maxVal = Math.max.apply(null, newarea); okVal = newobj[minVal]+opts.range+newobj[maxVal]; } if (isShow) { valdate = that.setValue(okVal); that.dateClose(); }else { valdate = that.setValue(okVal,that.format,false); } if (opts.range == false){ objVal = { YYYY:okVal.YYYY||sDate.getFullYear(), MM:jet.digit(okVal.MM||sDate.getMonth() + 1), DD:jet.digit(okVal.DD||sDate.getDate()), hh:jet.digit(okVal.hh||sDate.getHours()), mm:jet.digit(okVal.mm||sDate.getMinutes()), ss:jet.digit(okVal.ss||sDate.getSeconds()) }; }else { var rans = that.setValue(okVal,that.format,false),objVal = []; $.each(new Array(2),function (i,v) { var tmpval = {}, spra = jet.reMatch(rans.split(opts.range)[i]); $.each(jet.reMatch(that.format),function (r,val) { tmpval[val]=spra[r]; }); objVal.push(tmpval); }); } if ($.isFunction(opts.okfun) || opts.okfun != null) opts.okfun({elem:elemCell,val:valdate,date:objVal}); }); }; jedfn.clickTime = function (opts,boxCell) { var that = this; if(/\hh/.test(that.format)){ var timeUl = that.maincon(".timebox",1).find("ul"); timeUl.on("click","li",function () { var lithis = $(this); var ulidx = lithis.parent().attr("idx"), hmsval = lithis.text(); if (lithis.hasClass("disabled")) return; lithis.addClass('action').siblings().removeClass('action'); boxCell.find(".timecon em").eq(ulidx).text(hmsval); //计算当前时分秒的位置 that.locateScroll(timeUl); }); } }; //计算当前选中的滚动条位置 jedfn.locateScroll = function (cell) { $.each(cell, function() { var hmsCls = $(this), achmsCls = hmsCls.find(".action"); var acNUm = (achmsCls.length > 0) ? (achmsCls[0].offsetTop - 114):0; hmsCls[0].scrollTop = acNUm; }); }; //农历方位辨别 jedfn.lunarOrien = function(obj, self, pos) { var tops, leris, ortop, orleri, rect =self[0].getBoundingClientRect(); leris = rect.right + obj[0].offsetWidth / 1.5 >= jet.docArea(1) ? rect.right - obj[0].offsetWidth : rect.left + (pos ? 0 : jet.docScroll(1)); tops = rect.bottom + obj[0].offsetHeight / 1 <= jet.docArea() ? rect.bottom - 1 : rect.top > obj[0].offsetHeight / 1.5 ? rect.top - obj[0].offsetHeight - 1 : jet.docArea() - obj[0].offsetHeight; ortop = Math.max(tops + (pos ? 0 :jet.docScroll()) + 1, 1) + "px", orleri = leris + "px"; return {top: ortop, left: orleri } }; //辨别控件的方位 jedfn.dateOrien = function(boxCls, valCls, pos) { var that = this, tops, leris, ortop, orleri, rect = that.fixed ? valCls[0].getBoundingClientRect() : boxCls[0].getBoundingClientRect(), leris = rect.left, tops = rect.bottom; if(that.fixed) { var boxW = boxCls.outerWidth(), boxH = boxCls.outerHeight(); //如果右侧超出边界 if(leris + boxW > jet.docArea(true)){ leris = jet.docArea(true) - boxW; } //如果底部超出边界 if(tops + boxH > jet.docArea()){ tops = rect.top > boxH ? rect.top - boxH -2 : jet.docArea() - boxH -1; } //根据目标元素计算弹层位置 ortop = Math.max(tops + (pos ? 0 :jet.docScroll())+1, 1) + "px", orleri = leris + "px"; }else{ //弹层位置位于页面上下左右居中 ortop = "50%", orleri = "50%"; boxCls.css({"margin-top":-(rect.height / 2),"margin-left":-(rect.width / 2)}); } boxCls.css({"top":ortop,"left":orleri}); }; jedfn.tips = function (text, time) { var that = this, tipCls = $(jet.boxelem).find(".jedate-tips"); tipCls.html("").html(text||"").show(); clearTimeout(that.tipTime); that.tipTime = setTimeout(function(){ tipCls.html("").hide(); }, (time||2.5)*1000); }; //关闭层 jedfn.dateClose = function() { if($($(jet.boxelem).attr(jefix)).length == 0) $(jet.boxelem).remove(); }; //日期大小比较 jedfn.dateContrast = function (ac, bc) { var sarr = ac.split("-"), earr = bc.split("-"), start = parseInt(sarr[0]+""+jet.digit(parseInt(sarr[1])-1)+""+jet.digit(sarr[2]||"01")), end = parseInt(earr[0]+""+jet.digit(parseInt(earr[1])-1)+""+jet.digit(sarr[2]||"01")); return (start >= end) ? false : true; }; //删除区域属性 jedfn.delAreaAttr = function () { delete this.areaStart; delete this.areaEnd; this.areaVal = []; }; //日期控件版本 $.dateVer = "6.0.0"; //返回指定日期 $.nowDate = function (str,date,format) { format = format || 'YYYY-MM-DD hh:mm:ss'; date = date || []; if (typeof(str) === 'number') { str = {DD: str}; } return jet.reSetDate(str, date, format); }; //日期时间戳相互转换 $.timeStampDate = function (date,format) { format = format || 'YYYY-MM-DD hh:mm:ss'; var dateTest = (/^(-)?\d{1,10}$/.test(date) || /^(-)?\d{1,13}$/.test(date)); if(/^[1-9]*[1-9][0-9]*$/.test(date) && dateTest){ var vdate = parseInt(date); if (/^(-)?\d{1,10}$/.test(vdate)) { vdate = vdate * 1000; } else if (/^(-)?\d{1,13}$/.test(vdate)) { vdate = vdate * 1000; } else if (/^(-)?\d{1,14}$/.test(vdate)) { vdate = vdate * 100; } else { alert("时间戳格式不正确"); return; } var setdate = new Date(vdate); return jet.parse({YYYY:setdate.getFullYear(), MM:jet.digit(setdate.getMonth()+1), DD:jet.digit(setdate.getDate()) , hh:jet.digit(setdate.getHours()), mm:jet.digit(setdate.getMinutes()), ss:jet.digit(setdate.getSeconds()) }, format); }else { //将日期转换成时间戳 var arrs = jet.reMatch(date), newdate = new Date(arrs[0],parseInt(arrs[1])-1,arrs[2],arrs[3]||0,arrs[4]||0,arrs[5]||0), timeStr = Math.round(newdate.getTime() / 1000); return timeStr; } }; //分解日期时间 $.splitDate = function (str) { var sdate = str.match(/\w+|d+/g); return { YYYY:parseInt(sdate[0]),MM:parseInt(sdate[1])||00,DD:parseInt(sdate[2])||00, hh:parseInt(sdate[3])||00,mm:parseInt(sdate[4])||00,ss:parseInt(sdate[5])||00 }; }; //获取年月日星期 $.getLunar = function(date,format){ format = format || 'YYYY-MM-DD hh:mm:ss'; if(/YYYY-MM-DD/g.test(jet.isparmat(format))){ //如果为数字类型的日期对获取到日期的进行替换 var charDate = date.substr(0,4).replace(/^(\d{4})/g,"$1,") + date.substr(4).replace(/(.{2})/g,"$1,"), reArr = jet.isNum(date) ? jet.reMatch(charDate) : jet.reMatch(date), lunars = jeLunar(reArr[0], reArr[1] - 1, reArr[2]); return{ nMonth: lunars.lnongMonth, //农历月 nDays: lunars.lnongDate, //农历日 yYear: parseInt(lunars.solarYear), //阳历年 yMonth: parseInt(lunars.solarMonth), //阳历月 yDays: parseInt(lunars.solarDate), //阳历日 cWeek: lunars.inWeekDays, //汉字星期几 nWeek: lunars.solarWeekDay //数字星期几 }; } }; return jeDate; }); //农历数据 ;(function(root, factory) { root.jeLunar = factory(root.jeLunar); })(this, function(jeLunar) { var lunarInfo=[19416,19168,42352,21717,53856,55632,91476,22176,39632,21970,19168,42422,42192,53840,119381,46400,54944,44450,38320,84343,18800,42160,46261,27216,27968,109396,11104,38256,21234,18800,25958,54432,59984,28309,23248,11104,100067,37600,116951,51536,54432,120998,46416,22176,107956,9680,37584,53938,43344,46423,27808,46416,86869,19872,42448,83315,21200,43432,59728,27296,44710,43856,19296,43748,42352,21088,62051,55632,23383,22176,38608,19925,19152,42192,54484,53840,54616,46400,46496,103846,38320,18864,43380,42160,45690,27216,27968,44870,43872,38256,19189,18800,25776,29859,59984,27480,21952,43872,38613,37600,51552,55636,54432,55888,30034,22176,43959,9680,37584,51893,43344,46240,47780,44368,21977,19360,42416,86390,21168,43312,31060,27296,44368,23378,19296,42726,42208,53856,60005,54576,23200,30371,38608,19415,19152,42192,118966,53840,54560,56645,46496,22224,21938,18864,42359,42160,43600,111189,27936,44448], sTermInfo = [ 0, 21208, 43467, 63836, 85337, 107014, 128867, 150921, 173149, 195551, 218072, 240693, 263343, 285989, 308563, 331033, 353350, 375494, 397447, 419210, 440795, 462224, 483532, 504758 ]; var Gan = "甲乙丙丁戊己庚辛壬癸", Zhi = "子丑寅卯辰巳午未申酉戌亥", Animals = "鼠牛虎兔龙蛇马羊猴鸡狗猪"; var solarTerm = [ "小寒", "大寒", "立春", "雨水", "惊蛰", "春分", "清明", "谷雨", "立夏", "小满", "芒种", "夏至", "小暑", "大暑", "立秋", "处暑", "白露", "秋分", "寒露", "霜降", "立冬", "小雪", "大雪", "冬至" ]; var nStr1 = "日一二三四五六七八九十", nStr2 = "初十廿卅", nStr3 = [ "正", "二", "三", "四", "五", "六", "七", "八", "九", "十", "十一", "腊"], sFtv1 = { "0101" : "*1元旦节", "0202" : "湿地日", "0214" : "情人节", "0308" : "妇女节", "0312" : "植树节", "0315" : "消费者权益日", "0401" : "愚人节", "0422" : "地球日", "0501" : "*1劳动节", "0504" : "青年节", "0512" : "护士节", "0518" : "博物馆日", "0520" : "母亲节", "0601" : "儿童节", "0623" : "奥林匹克日", "0630" : "父亲节", "0701" : "建党节", "0801" : "建军节", "0903" : "抗战胜利日", "0910" : "教师节", "1001" : "*3国庆节", "1201" : "艾滋病日", "1224" : "平安夜", "1225" : "圣诞节" }, sFtv2 = { "0100" : "除夕", "0101" : "*2春节", "0115" : "元宵节", "0505" : "*1端午节", "0707" : "七夕节", "0715" : "中元节", "0815" : "*1中秋节", "0909" : "*1重阳节", "1015" : "下元节", "1208" : "腊八节", "1223" : "小年" }; function flunar(Y) { var sTerm = function (j, i) { var h = new Date((31556925974.7 * (j - 1900) + sTermInfo[i] * 60000) + Date.UTC(1900, 0, 6, 2, 5)); return (h.getUTCDate()) }, d = function (k) { var h, j = 348; for (h = 32768; h > 8; h >>= 1) { j += (lunarInfo[k - 1900] & h) ? 1 : 0; } return (j + b(k)) }, ymdCyl = function (h) { return (Gan.charAt(h % 10) + Zhi.charAt(h % 12)) }, b =function (h) { var islp = (g(h)) ? ((lunarInfo[h - 1900] & 65536) ? 30 : 29) : (0); return islp }, g = function (h) { return (lunarInfo[h - 1900] & 15) }, e = function (i, h) { return ((lunarInfo[i - 1900] & (65536 >> h)) ? 30 : 29) }, newymd = function (m) { var k, j = 0, h = 0, l = new Date(1900, 0, 31), n = (m - l) / 86400000; this.dayCyl = n + 40; this.monCyl = 14; for (k = 1900; k<2050&&n>0; k++) { h = d(k); n -= h; this.monCyl += 12; } if (n < 0) { n += h; k--; this.monCyl -= 12; } this.year = k; this.yearCyl = k - 1864; j = g(k); this.isLeap = false; for (k = 1; k<13&&n>0; k++) { if (j > 0 && k == (j + 1) && this.isLeap == false) { --k; this.isLeap = true; h = b(this.year); } else { h = e(this.year, k); } if (this.isLeap == true && k == (j + 1)) { this.isLeap = false; } n -= h; if (this.isLeap == false) this.monCyl++; } if (n == 0 && j > 0 && k == j + 1) { if (this.isLeap) { this.isLeap = false; } else { this.isLeap = true; --k; --this.monCyl; } } if (n < 0) { n += h; --k; --this.monCyl } this.month = k; this.day = n + 1; }, digit = function (num) { return num < 10 ? "0" + (num | 0) :num; }, reymd = function (i, j) { var h = i; return j.replace(/dd?d?d?|MM?M?M?|yy?y?y?/g, function(k) { switch (k) { case "yyyy": var l = "000" + h.getFullYear(); return l.substring(l.length - 4); case "dd": return digit(h.getDate()); case "d": return h.getDate().toString(); case "MM": return digit((h.getMonth() + 1)); case "M": return h.getMonth() + 1; } }) }, lunarMD = function (i, h) { var j; switch (i, h) { case 10: j = "初十"; break; case 20: j = "二十"; break; case 30: j = "三十"; break; default: j = nStr2.charAt(Math.floor(h / 10)); j += nStr1.charAt(h % 10); } return (j) }; this.isToday = false; this.isRestDay = false; this.solarYear = reymd(Y, "yyyy"); this.solarMonth = reymd(Y, "M"); this.solarDate = reymd(Y, "d"); this.solarWeekDay = Y.getDay(); this.inWeekDays = "星期" + nStr1.charAt(this.solarWeekDay); var X = new newymd(Y); this.lunarYear = X.year; this.shengxiao = Animals.charAt((this.lunarYear - 4) % 12); this.lunarMonth = X.month; this.lunarIsLeapMonth = X.isLeap; this.lnongMonth = this.lunarIsLeapMonth ? "闰" + nStr3[X.month - 1] : nStr3[X.month - 1]; this.lunarDate = X.day; this.showInLunar = this.lnongDate = lunarMD(this.lunarMonth, this.lunarDate); if (this.lunarDate == 1) { this.showInLunar = this.lnongMonth + "月"; } this.ganzhiYear = ymdCyl(X.yearCyl); this.ganzhiMonth = ymdCyl(X.monCyl); this.ganzhiDate = ymdCyl(X.dayCyl++); this.jieqi = ""; this.restDays = 0; if (sTerm(this.solarYear, (this.solarMonth - 1) * 2) == reymd(Y, "d")) { this.showInLunar = this.jieqi = solarTerm[(this.solarMonth - 1) * 2]; } if (sTerm(this.solarYear, (this.solarMonth - 1) * 2 + 1) == reymd(Y, "d")) { this.showInLunar = this.jieqi = solarTerm[(this.solarMonth - 1) * 2 + 1]; } if (this.showInLunar == "清明") { this.showInLunar = "清明节"; this.restDays = 1; } this.solarFestival = sFtv1[reymd(Y, "MM") + reymd(Y, "dd")]; if (typeof this.solarFestival == "undefined") { this.solarFestival = ""; } else { if (/\*(\d)/.test(this.solarFestival)) { this.restDays = parseInt(RegExp.$1); this.solarFestival = this.solarFestival.replace(/\*\d/, ""); } } this.showInLunar = (this.solarFestival == "") ? this.showInLunar : this.solarFestival; this.lunarFestival = sFtv2[this.lunarIsLeapMonth ? "00" : digit(this.lunarMonth) + digit(this.lunarDate)]; if (typeof this.lunarFestival == "undefined") { this.lunarFestival = ""; } else { if (/\*(\d)/.test(this.lunarFestival)) { this.restDays = (this.restDays > parseInt(RegExp.$1)) ? this.restDays : parseInt(RegExp.$1); this.lunarFestival = this.lunarFestival.replace(/\*\d/, ""); } } if (this.lunarMonth == 12 && this.lunarDate == e(this.lunarYear, 12)) { this.lunarFestival = sFtv2["0100"]; this.restDays = 1; } this.showInLunar = (this.lunarFestival == "") ? this.showInLunar : this.lunarFestival; } var jeLunar = function(y,m,d) { return new flunar(new Date(y,m,d)); }; return jeLunar; });