;(function(root,factory){ if (typeof define==='function'&&define.amd){ define(factory); }else if(typeof module!='undefined'&&module.exports){ module.exports = factory(); }else{ var o = factory(); for(var i in o){ root[i] = o[i]; } } })(this,function(){ var Solar = (function(){ var _int2=function(v){ v = Math.floor(v); return v<0?v+1:v; }; var _fromDate = function(date){ return _fromYmdHms(date.getFullYear(),date.getMonth()+1,date.getDate(),date.getHours(),date.getMinutes(),date.getSeconds()); }; var _fromJulianDay = function(julianDay){ var jd = julianDay + 0.5; var a = _int2(jd); var f = jd - a; var d; if (a > 2299161) { d = _int2((a - 1867216.25) / 36524.25); a += 1 + d - _int2(d / 4); } a += 1524; var year = _int2((a - 122.1) / 365.25); d = a - _int2(365.25 * year); var month = _int2(d / 30.6001); var day = _int2(d - _int2(month * 30.6001)); year -= 4716; month--; if (month > 12) { month -= 12; } if (month <= 2) { year++; } f *= 24; var hour = _int2(f); f -= hour; f *= 60; var minute = _int2(f); f -= minute; f *= 60; var second = _int2(f); return _fromYmdHms(year,month,day,hour,minute,second); }; var _fromYmdHms = function(y,m,d,hour,minute,second){ return { _p:{ year:y, month:m, day:d, hour:hour, minute:minute, second:second, calendar:new Date(y+'/'+m+'/'+d+' '+hour+':'+minute+':'+second) }, getYear:function(){ return this._p.year; }, getMonth:function(){ return this._p.month; }, getDay:function(){ return this._p.day; }, getHour:function(){ return this._p.hour; }, getMinute:function(){ return this._p.minute; }, getSecond:function(){ return this._p.second; }, getWeek:function(){ return this._p.calendar.getDay(); }, getWeekInChinese:function(){ return SolarUtil.WEEK[this.getWeek()]; }, /** * 获取当天的阳历周 * @param start 星期几作为一周的开始,1234560分别代表星期一至星期天 */ getSolarWeek:function(start){ return SolarWeek.fromDate(this._p.calendar,start); }, isLeapYear:function(){ return SolarUtil.isLeapYear(this._p.year); }, getFestivals:function(){ var l = []; var f = SolarUtil.FESTIVAL[this._p.month+'-'+this._p.day]; if(f) l.push(f); var week = this.getWeek(); var weekInMonth = Math.ceil((this._p.day-week)/7); if(week>0) weekInMonth++; f = SolarUtil.WEEK_FESTIVAL[this._p.month+'-'+weekInMonth+'-'+week]; if(f) l.push(f); return l; }, getOtherFestivals:function(){ var l = []; var fs = SolarUtil.OTHER_FESTIVAL[this._p.month+'-'+this._p.day]; if(fs){ for(var i=0,j=fs.length;i=321&&y<=419) index = 0; else if(y>=420&&y<=520) index = 1; else if(y>=521&&y<=620) index = 2; else if(y>=621&&y<=722) index = 3; else if(y>=723&&y<=822) index = 4; else if(y>=823&&y<=922) index = 5; else if(y>=923&&y<=1022) index = 6; else if(y>=1023&&y<=1121) index = 7; else if(y>=1122&&y<=1221) index = 8; else if(y>=1222||y<=119) index = 9; else if(y<=218) index = 10; return SolarUtil.XINGZUO[index]; }, getXingZuo:function(){ return this.getXingzuo(); }, toYmd:function(){ return [this._p.year,(this._p.month<10?'0':'')+this._p.month,(this._p.day<10?'0':'')+this._p.day].join('-'); }, toYmdHms:function(){ return this.toYmd()+' '+[(this._p.hour<10?'0':'')+this._p.hour,(this._p.minute<10?'0':'')+this._p.minute,(this._p.second<10?'0':'')+this._p.second].join(':'); }, toString:function(){ return this.toYmd(); }, toFullString:function(){ var s = this.toYmdHms(); if(this.isLeapYear()){ s += ' 闰年'; } s += ' 星期'+this.getWeekInChinese(); var festivals = this.getFestivals(); for(var i=0,j=festivals.length;i= 588829) { n = _int2(y / 100); n = 2 - n + _int2(n / 4); } n += _int2(365.2500001 * (y + 4716)); n += _int2(30.6 * (m + 1)) + this._p.day; n += ((this._p.second / 60 + this._p.minute) / 60 + this._p.hour) / 24 - 1524.5; return n; } }; }; return { J2000:2451545, fromYmd:function(y,m,d){return _fromYmdHms(y,m,d,0,0,0);}, fromYmdHms:function(y,m,d,hour,minute,second){return _fromYmdHms(y,m,d,hour,minute,second);}, fromDate:function(date){return _fromDate(date);}, fromJulianDay:function(julianDay){return _fromJulianDay(julianDay);} }; })(); var Lunar = (function(){ var RAD_PER_DEGREE = Math.PI / 180; var DEGREE_PER_RAD = 180 / Math.PI; var SECOND_PER_RAD = 180 * 3600 / Math.PI; var JIE_QI = ['冬至','小寒','大寒','立春','雨水','惊蛰','春分','清明','谷雨','立夏','小满','芒种','夏至','小暑','大暑','立秋','处暑','白露','秋分','寒露','霜降','立冬','小雪','大雪']; var E10 = [1.75347045673, 0.00000000000, 0.0000000000, 0.03341656456, 4.66925680417, 6283.0758499914, 0.00034894275, 4.62610241759, 12566.1516999828, 0.00003417571, 2.82886579606, 3.5231183490, 0.00003497056, 2.74411800971, 5753.3848848968, 0.00003135896, 3.62767041758, 77713.7714681205, 0.00002676218, 4.41808351397, 7860.4193924392, 0.00002342687, 6.13516237631, 3930.2096962196, 0.00001273166, 2.03709655772, 529.6909650946, 0.00001324292, 0.74246356352, 11506.7697697936, 0.00000901855, 2.04505443513, 26.2983197998, 0.00001199167, 1.10962944315, 1577.3435424478, 0.00000857223, 3.50849156957, 398.1490034082, 0.00000779786, 1.17882652114, 5223.6939198022, 0.00000990250, 5.23268129594, 5884.9268465832, 0.00000753141, 2.53339053818, 5507.5532386674, 0.00000505264, 4.58292563052, 18849.2275499742, 0.00000492379, 4.20506639861, 775.5226113240, 0.00000356655, 2.91954116867, 0.0673103028, 0.00000284125, 1.89869034186, 796.2980068164, 0.00000242810, 0.34481140906, 5486.7778431750, 0.00000317087, 5.84901952218, 11790.6290886588, 0.00000271039, 0.31488607649, 10977.0788046990, 0.00000206160, 4.80646606059, 2544.3144198834, 0.00000205385, 1.86947813692, 5573.1428014331, 0.00000202261, 2.45767795458, 6069.7767545534, 0.00000126184, 1.08302630210, 20.7753954924, 0.00000155516, 0.83306073807, 213.2990954380, 0.00000115132, 0.64544911683, 0.9803210682, 0.00000102851, 0.63599846727, 4694.0029547076, 0.00000101724, 4.26679821365, 7.1135470008, 0.00000099206, 6.20992940258, 2146.1654164752, 0.00000132212, 3.41118275555, 2942.4634232916, 0.00000097607, 0.68101272270, 155.4203994342, 0.00000085128, 1.29870743025, 6275.9623029906, 0.00000074651, 1.75508916159, 5088.6288397668, 0.00000101895, 0.97569221824, 15720.8387848784, 0.00000084711, 3.67080093025, 71430.6956181291, 0.00000073547, 4.67926565481, 801.8209311238, 0.00000073874, 3.50319443167, 3154.6870848956, 0.00000078756, 3.03698313141, 12036.4607348882, 0.00000079637, 1.80791330700, 17260.1546546904, 0.00000085803, 5.98322631256, 161000.6857376741, 0.00000056963, 2.78430398043, 6286.5989683404, 0.00000061148, 1.81839811024, 7084.8967811152, 0.00000069627, 0.83297596966, 9437.7629348870, 0.00000056116, 4.38694880779, 14143.4952424306, 0.00000062449, 3.97763880587, 8827.3902698748, 0.00000051145, 0.28306864501, 5856.4776591154, 0.00000055577, 3.47006009062, 6279.5527316424, 0.00000041036, 5.36817351402, 8429.2412664666, 0.00000051605, 1.33282746983, 1748.0164130670, 0.00000051992, 0.18914945834, 12139.5535091068, 0.00000049000, 0.48735065033, 1194.4470102246, 0.00000039200, 6.16832995016, 10447.3878396044, 0.00000035566, 1.77597314691, 6812.7668150860, 0.00000036770, 6.04133859347, 10213.2855462110, 0.00000036596, 2.56955238628, 1059.3819301892, 0.00000033291, 0.59309499459, 17789.8456197850, 0.00000035954, 1.70876111898, 2352.8661537718]; var E11 = [6283.31966747491, 0.00000000000, 0.0000000000, 0.00206058863, 2.67823455584, 6283.0758499914, 0.00004303430, 2.63512650414, 12566.1516999828, 0.00000425264, 1.59046980729, 3.5231183490, 0.00000108977, 2.96618001993, 1577.3435424478, 0.00000093478, 2.59212835365, 18849.2275499742, 0.00000119261, 5.79557487799, 26.2983197998, 0.00000072122, 1.13846158196, 529.6909650946, 0.00000067768, 1.87472304791, 398.1490034082, 0.00000067327, 4.40918235168, 5507.5532386674, 0.00000059027, 2.88797038460, 5223.6939198022, 0.00000055976, 2.17471680261, 155.4203994342, 0.00000045407, 0.39803079805, 796.2980068164, 0.00000036369, 0.46624739835, 775.5226113240, 0.00000028958, 2.64707383882, 7.1135470008, 0.00000019097, 1.84628332577, 5486.7778431750, 0.00000020844, 5.34138275149, 0.9803210682, 0.00000018508, 4.96855124577, 213.2990954380, 0.00000016233, 0.03216483047, 2544.3144198834, 0.00000017293, 2.99116864949, 6275.9623029906]; var E12 = [0.00052918870, 0.00000000000, 0.0000000000, 0.00008719837, 1.07209665242, 6283.0758499914, 0.00000309125, 0.86728818832, 12566.1516999828, 0.00000027339, 0.05297871691, 3.5231183490, 0.00000016334, 5.18826691036, 26.2983197998, 0.00000015752, 3.68457889430, 155.4203994342, 0.00000009541, 0.75742297675, 18849.2275499742, 0.00000008937, 2.05705419118, 77713.7714681205, 0.00000006952, 0.82673305410, 775.5226113240, 0.00000005064, 4.66284525271, 1577.3435424478]; var E13 = [0.00000289226, 5.84384198723, 6283.0758499914, 0.00000034955, 0.00000000000, 0.0000000000, 0.00000016819, 5.48766912348, 12566.1516999828]; var E14 = [0.00000114084, 3.14159265359, 0.0000000000, 0.00000007717, 4.13446589358, 6283.0758499914, 0.00000000765, 3.83803776214, 12566.1516999828]; var E15 = [0.00000000878, 3.14159265359, 0.0000000000]; var E20 = [0.00000279620, 3.19870156017, 84334.6615813083, 0.00000101643, 5.42248619256, 5507.5532386674, 0.00000080445, 3.88013204458, 5223.6939198022, 0.00000043806, 3.70444689758, 2352.8661537718, 0.00000031933, 4.00026369781, 1577.3435424478, 0.00000022724, 3.98473831560, 1047.7473117547, 0.00000016392, 3.56456119782, 5856.4776591154, 0.00000018141, 4.98367470263, 6283.0758499914, 0.00000014443, 3.70275614914, 9437.7629348870, 0.00000014304, 3.41117857525, 10213.2855462110]; var E21 = [0.00000009030, 3.89729061890, 5507.5532386674, 0.00000006177, 1.73038850355, 5223.6939198022]; var GXC_E = [0.016708634, -0.000042037, -0.0000001267]; var GXC_P = [102.93735 / DEGREE_PER_RAD, 1.71946 / DEGREE_PER_RAD, 0.00046 / DEGREE_PER_RAD]; var GXC_L = [280.4664567 / DEGREE_PER_RAD, 36000.76982779 / DEGREE_PER_RAD, 0.0003032028 / DEGREE_PER_RAD, 1 / 49931000 / DEGREE_PER_RAD, -1 / 153000000 / DEGREE_PER_RAD]; var GXC_K = 20.49552 / SECOND_PER_RAD; var ZD = [2.1824391966, -33.757045954, 0.0000362262, 3.7340E-08, -2.8793E-10, -171996, -1742, 92025, 89, 3.5069406862, 1256.663930738, 0.0000105845, 6.9813E-10, -2.2815E-10, -13187, -16, 5736, -31, 1.3375032491, 16799.418221925, -0.0000511866, 6.4626E-08, -5.3543E-10, -2274, -2, 977, -5, 4.3648783932, -67.514091907, 0.0000724525, 7.4681E-08, -5.7586E-10, 2062, 2, -895, 5, 0.0431251803, -628.301955171, 0.0000026820, 6.5935E-10, 5.5705E-11, -1426, 34, 54, -1, 2.3555557435, 8328.691425719, 0.0001545547, 2.5033E-07, -1.1863E-09, 712, 1, -7, 0, 3.4638155059, 1884.965885909, 0.0000079025, 3.8785E-11, -2.8386E-10, -517, 12, 224, -6, 5.4382493597, 16833.175267879, -0.0000874129, 2.7285E-08, -2.4750E-10, -386, -4, 200, 0, 3.6930589926, 25128.109647645, 0.0001033681, 3.1496E-07, -1.7218E-09, -301, 0, 129, -1, 3.5500658664, 628.361975567, 0.0000132664, 1.3575E-09, -1.7245E-10, 217, -5, -95, 3]; var _fromDate = function(date){ var solar = Solar.fromDate(date); var y = solar.getYear(); var m = solar.getMonth(); var d = solar.getDay(); var hour = date.getHours(); var minute = date.getMinutes(); var second = date.getSeconds(); var startY,startM,startD; var lunarY,lunarM,lunarD; if(y<2000){ startY = SolarUtil.BASE_YEAR; startM = SolarUtil.BASE_MONTH; startD = SolarUtil.BASE_DAY; lunarY = LunarUtil.BASE_YEAR; lunarM = LunarUtil.BASE_MONTH; lunarD = LunarUtil.BASE_DAY; }else{ startY = SolarUtil.BASE_YEAR+99; startM = 1; startD = 1; lunarY = LunarUtil.BASE_YEAR+99; lunarM = 11; lunarD = 25; } var diff = 0,i; for(i=startY;ilastDate){ lunarD -= lastDate; lunarM = LunarUtil.nextMonth(lunarY,lunarM); if(lunarM===1) lunarY++; lastDate = LunarUtil.getDaysOfMonth(lunarY,lunarM); } return _fromYmdHms(lunarY,lunarM,lunarD,hour,minute,second,solar); }; var _mrad = function(rad) { var pi2 = 2 * Math.PI; rad = rad % pi2; return rad<0?rad+pi2:rad; }; var _gxc = function(t, pos) { var t1 = t / 36525; var t2 = t1 * t1; var t3 = t2 * t1; var t4 = t3 * t1; var l = GXC_L[0] + GXC_L[1] * t1 + GXC_L[2] * t2 + GXC_L[3] * t3 + GXC_L[4] * t4; var p = GXC_P[0] + GXC_P[1] * t1 + GXC_P[2] * t2; var e = GXC_E[0] + GXC_E[1] * t1 + GXC_E[2] * t2; var dl = l - pos[0], dp = p - pos[0]; pos[0] -= GXC_K * (Math.cos(dl) - e * Math.cos(dp)) / Math.cos(pos[1]); pos[1] -= GXC_K * Math.sin(pos[1]) * (Math.sin(dl) - e * Math.sin(dp)); pos[0] = _mrad(pos[0]); }; var _enn = function(f,ennt) { var v = 0; for(var i=0,j=f.length;i 1e-15) { k = k2; } t = t1 - v1 / k; v = _calRad(t, rad); if (v > 1) { v -= 2 * Math.PI; } if (Math.abs(v) < 1e-8) { break; } t1 = t2; v1 = v2; t2 = t; v2 = v; } return t; }; var _computeJieQi = function(o,solar) { o['jieQiList'] = []; o['jieQi'] = {}; var jd = 365.2422 * (solar.getYear()-2001); for (var i = 0,j=JIE_QI.length; i < j; i++) { var t = _calJieQi(jd+i*15.2, i*15-90) + Solar.J2000 + 8 / 24; var key = JIE_QI[i]; o['jieQiList'].push(key); o['jieQi'][key] = Solar.fromJulianDay(t); } }; var _computeYear = function(o,solar,year){ var yearGanIndex = (year+LunarUtil.BASE_YEAR_GANZHI_INDEX)%10; var yearZhiIndex = (year+LunarUtil.BASE_YEAR_GANZHI_INDEX)%12; //以立春作为新一年的开始的干支纪年 var g = yearGanIndex; var z = yearZhiIndex; //精确的干支纪年,以立春交接时刻为准 var gExact = yearGanIndex; var zExact = yearZhiIndex; if(year===solar.getYear()){ //获取立春的阳历时刻 var liChun = o['jieQi']['立春']; //立春日期判断 if(solar.toYmd()=symd&&ymd=stime&&time0){ s += ' ['+jq+']'; } s += ' '+this.getGong()+'方'+this.getShou(); s += ' 星宿['+this.getXiu()+this.getZheng()+this.getAnimal()+']('+this.getXiuLuck()+')'; s += ' 彭祖百忌['+this.getPengZuGan()+' '+this.getPengZuZhi()+']'; s += ' 喜神方位['+this.getPositionXi()+']('+this.getPositionXiDesc()+')'; s += ' 阳贵神方位['+this.getPositionYangGui()+']('+this.getPositionYangGuiDesc()+')'; s += ' 阴贵神方位['+this.getPositionYinGui()+']('+this.getPositionYinGuiDesc()+')'; s += ' 福神方位['+this.getPositionFu()+']('+this.getPositionFuDesc()+')'; s += ' 财神方位['+this.getPositionCai()+']('+this.getPositionCaiDesc()+')'; s += ' 冲['+this.getChongDesc()+']'; s += ' 煞['+this.getSha()+']'; return s; } }; }; return { fromYmdHms:function(y,m,d,hour,minute,second){return _fromYmdHms(y,m,d,hour,minute,second);}, fromYmd:function(y,m,d){return _fromYmdHms(y,m,d,0,0,0);}, fromDate:function(date){return _fromDate(date);} }; })(); var SolarWeek = (function(){ var _fromDate = function(date,start){ return _fromYmd(date.getFullYear(),date.getMonth()+1,date.getDate(),start); }; var _fromYmd = function(y,m,d,start){ return { _p:{ year:y, month:m, day:d, start:start, calendar:new Date(y+'/'+m+'/'+d) }, getYear:function(){ return this._p.year; }, getMonth:function(){ return this._p.month; }, getDay:function(){ return this._p.day; }, getStart:function(){ return this._p.start; }, /** * 获取当前日期是在当月第几周 * @return number 周序号,从1开始 */ getIndex:function(){ var firstDate = new Date(this._p.year+'/'+this._p.month+'/1'); var firstDayWeek = firstDate.getDay(); if(firstDayWeek===0){ firstDayWeek = 7; } return Math.ceil((this._p.day+firstDayWeek-this._p.start)/7); }, /** * 周推移 * @param weeks 推移的周数,负数为倒推 * @param separateMonth 是否按月单独计算 * @return object 推移后的阳历周 */ next:function(weeks,separateMonth){ if(0===weeks){ return _fromYmd(this._p.year,this._p.month,this._p.day,this._p.start); } var date; if(separateMonth){ var n = weeks; date = new Date(this._p.year+'/'+this._p.month+'/'+this._p.day); var week = _fromDate(date,this._p.start); var month = this._p.month; var plus = n>0; while(0!==n){ date.setDate(date.getDate()+(plus?7:-7)); week = _fromDate(date,this._p.start); var weekMonth = week.getMonth(); if(month!==weekMonth){ var index = week.getIndex(); if(plus){ if(1===index){ var firstDay = week.getFirstDay(); week = _fromYmd(firstDay.getYear(),firstDay.getMonth(),firstDay.getDay(),this._p.start); weekMonth = week.getMonth(); }else{ date = new Date(week.getYear()+'/'+week.getMonth()+'/1'); week = _fromDate(date,this._p.start); } }else{ var size = SolarUtil.getWeeksOfMonth(week.getYear(),week.getMonth(),this._p.start); if(size===index){ var lastDay = week.getFirstDay().next(6); week = _fromYmd(lastDay.getYear(),lastDay.getMonth(),lastDay.getDay(),this._p.start); weekMonth = week.getMonth(); }else{ date = new Date(week.getYear()+'/'+week.getMonth()+'/'+SolarUtil.getDaysOfMonth(week.getYear(),week.getMonth())); week = _fromDate(date,this._p.start); } } month = weekMonth; } n-=plus?1:-1; } return week; }else{ date = new Date(this._p.year+'/'+this._p.month+'/'+this._p.day); date.setDate(date.getDate()+weeks*7); return _fromDate(date,this._p.start); } }, /** * 获取本周第一天的阳历日期(可能跨月) * @return object 本周第一天的阳历日期 */ getFirstDay:function(){ var date = new Date(this._p.year+'/'+this._p.month+'/'+this._p.day); var week = date.getDay(); var prev = week-this._p.start; if(prev<0){ prev += 7; } date.setDate(date.getDate()-prev); return Solar.fromDate(date); }, /** * 获取本周第一天的阳历日期(仅限当月) * @return object 本周第一天的阳历日期 */ getFirstDayInMonth:function(){ var days = this.getDays(); for(var i = 0;i>4)&0x0F; return v; }, nextMonth:function(y,m){ var n = Math.abs(m)+1; if(m>0){ var index = y-this.BASE_YEAR+this.BASE_INDEX; var v = this.LUNAR_MONTH[2*index+1]; v = (v>>4)&0x0F; if(v===m){ n = -m; } } if(n===13) n = 1; return n; }, getDaysOfMonth:function(year,month){ var index = year-this.BASE_YEAR+this.BASE_INDEX; var v = 0,l = 0,d = 30; if(1<=month&&month<=8){ v = this.LUNAR_MONTH[2*index]; l = month-1; if(((v>>l)&0x01)===1){ d = 29; } }else if(9<=month&&month<=12){ v = this.LUNAR_MONTH[2*index+1]; l = month-9; if(((v>>l)&0x01)===1){ d = 29; } }else{ v = this.LUNAR_MONTH[2*index+1]; v = (v>>4)&0x0F; if(v!==Math.abs(month)){ d = 0; }else{ d = 29; for(var i = 0;i5){ hm = hm.substring(0,5); } var x = 1; for(var i=1;i<22;i+=2){ if(hm>=((i<10?'0':'')+i+':00')&&hm<=((i+1<10?'0':'')+(i+1)+':59')){ return x; } x++; } return 0; }, convertTime:function(hm){ return this.ZHI[this.getTimeZhiIndex(hm)+1]; }, getJiaZiIndex:function(ganZhi){ for(var i=0,j=this.JIA_ZI.length;i-1) { right = right.substr(index+3); var left = right; if (left.indexOf('=')>-1) { left = left.substring(0, left.indexOf('=') - 2); } var matched = false; var months = left.substr(0, left.indexOf(':')); var i,m,j; for (i = 0, j = months.length; i < j; i += 2) { m = months.substr(i, 2); if (m==month) { matched = true; break; } } if(matched) { var ys = left.substring(left.indexOf(':') + 1, left.indexOf(',')); for (i = 0, j = ys.length; i < j; i += 2) { m = ys.substr(i, 2); l.push(this.YI_JI[parseInt(m,16)]); } break; } index = right.indexOf(day+'='); } return l; }, getDayJi:function(monthGanZhi,dayGanZhi){ var l = []; var day = this.hex(this.getJiaZiIndex(dayGanZhi)); var month = this.hex(this.getJiaZiIndex(monthGanZhi)); var right = this.DAY_YI_JI; var index = right.indexOf(day+'='); while(index>-1) { right = right.substr(index+3); var left = right; if (left.indexOf('=')>-1) { left = left.substring(0, left.indexOf('=') - 2); } var matched = false; var months = left.substr(0, left.indexOf(':')); var i,m,j; for (i = 0, j = months.length; i < j; i += 2) { m = months.substr(i, 2); if (m==month) { matched = true; break; } } if(matched) { var js = left.substring(left.indexOf(',')+1); for (i = 0, j = js.length; i < j; i += 2) { m = js.substr(i, 2); l.push(this.YI_JI[parseInt(m,16)]); } break; } index = right.indexOf(day+'='); } return l; } }; })(); var HolidayUtil = (function(){ var _SIZE = 18,_ZERO='0'.charCodeAt(0),_NAMES=['元旦节','春节','清明节','劳动节','端午节','中秋节','国庆节','国庆中秋','抗战胜利日'],_DATA='201101010120110101201101020120110101201101030120110101201101301020110203201102021120110203201102031120110203201102041120110203201102051120110203201102061120110203201102071120110203201102081120110203201102121020110203201104022020110405201104032120110405201104042120110405201104052120110405201104303120110501201105013120110501201105023120110501201106044120110606201106054120110606201106064120110606201109105120110912201109115120110912201109125120110912201110016120111001201110026120111001201110036120111001201110046120111001201110056120111001201110066120111001201110076120111001201110086020111001201110096020111001201112310020120101201201010120120101201201020120120101201201030120120101201201211020120123201201221120120123201201231120120123201201241120120123201201251120120123201201261120120123201201271120120123201201281120120123201201291020120123201203312020120404201204012020120404201204022120120404201204032120120404201204042120120404201204283020120501201204293120120501201204303120120501201205013120120501201205023020120501201206224120120623201206234120120623201206244120120623201209295020120930201209305120120930201210016120121001201210026120121001201210036120121001201210046120121001201210056120121001201210066120121001201210076120121001201210086020121001201301010120130101201301020120130101201301030120130101201301050020130101201301060020130101201302091120130210201302101120130210201302111120130210201302121120130210201302131120130210201302141120130210201302151120130210201302161020130210201302171020130210201304042120130404201304052120130404201304062120130404201304273020130501201304283020130501201304293120130501201304303120130501201305013120130501201306084020130612201306094020130612201306104120130612201306114120130612201306124120130612201309195120130919201309205120130919201309215120130919201309225020130919201309296020131001201310016120131001201310026120131001201310036120131001201310046120131001201310056120131001201310066120131001201310076120131001201401010120140101201401261020140131201401311120140131201402011120140131201402021120140131201402031120140131201402041120140131201402051120140131201402061120140131201402081020140131201404052120140405201404062120140405201404072120140405201405013120140501201405023120140501201405033120140501201405043020140501201405314120140602201406014120140602201406024120140602201409065120140908201409075120140908201409085120140908201409286020141001201410016120141001201410026120141001201410036120141001201410046120141004201410056120141001201410066120141001201410076120141001201410116020141001201501010120150101201501020120150101201501030120150101201501040020150101201502151020150219201502181120150219201502191120150219201502201120150219201502211120150219201502221120150219201502231120150219201502241120150219201502281020150219201504042120150405201504052120150405201504062120150405201505013120150501201505023120150501201505033120150501201506204120150620201506214120150620201506224120150620201509038120150903201509048120150903201509058120150903201509068020150903201509265120150927201509275120150927201510016120151001201510026120151001201510036120151001201510046120151004201510056120151001201510066120151001201510076120151001201510106020151001201601010120160101201601020120160101201601030120160101201602061020160208201602071120160208201602081120160208201602091120160208201602101120160208201602111120160208201602121120160208201602131120160208201602141020160208201604022120160404201604032120160404201604042120160404201604303120160501201605013120160501201605023120160501201606094120160609201606104120160609201606114120160609201606124020160609201609155120160915201609165120160915201609175120160915201609185020160915201610016120161001201610026120161001201610036120161001201610046120161004201610056120161001201610066120161001201610076120161001201610086020161001201610096020161001201612310120170101201701010120170101201701020120170101201701221020170128201701271120170128201701281120170128201701291120170128201701301120170128201701311120170128201702011120170128201702021120170128201702041020170128201704012020170404201704022120170404201704032120170404201704042120170404201704293120170501201704303120170501201705013120170501201705274020170530201705284120170530201705294120170530201705304120170530201709306020171001201710016120171001201710026120171001201710036120171001201710045120171004201710056120171001201710066120171001201710076120171001201710086120171001201712300120180101201712310120180101201801010120180101201802111020180216201802151120180216201802161120180216201802171120180216201802181120180216201802191120180216201802201120180216201802211120180216201802241020180216201804052120180405201804062120180405201804072120180405201804082020180405201804283020180501201804293120180501201804303120180501201805013120180501201806164120180618201806174120180618201806184120180618201809225120180924201809235120180924201809245120180924201809296020181001201809306020181001201810016120181001201810026120181001201810036120181001201810046120181001201810056120181001201810066120181001201810076120181001201812290020190101201812300120190101201812310120190101201901010120190101201902021020190205201902031020190205201902041120190205201902051120190205201902061120190205201902071120190205201902081120190205201902091120190205201902101120190205201904052120190405201904062120190405201904072120190405201904283020190501201905013120190501201905023120190501201905033120190501201905043120190501201905053020190501201906074120190607201906084120190607201906094120190607201909135120190913201909145120190913201909155120190913201909296020191001201910016120191001201910026120191001201910036120191001201910046120191001201910056120191001201910066120191001201910076120191001201910126020191001202001010120200101202001191020200125202001241120200125202001251120200125202001261120200125202001271120200125202001281120200125202001291120200125202001301120200125202001311120200125202002011120200125202002021120200125202004042120200404202004052120200404202004062120200404202004263020200501202005013120200501202005023120200501202005033120200501202005043120200501202005053120200501202005093020200501202006254120200625202006264120200625202006274120200625202006284020200625202009277020201001202010017120201001202010026120201001202010036120201001202010046120201001202010056120201001202010066120201001202010076120201001202010086120201001202010106020201001'; var _padding = function(n){ return (n<10?'0':'')+n; }; var _ymd = function(s){ return s.indexOf('-')<0?(s.substr(0,4)+'-'+s.substr(4,2)+'-'+s.substr(6)):s; }; var _buildHoliday = function(day,name,work,target){ return { _p:{ day:_ymd(day), name:name, work:work, target:_ymd(target) }, getDay:function(){ return this._p.day; }, setDay:function(v){ this._p.day = _ymd(v); }, getName:function(){ return this._p.name; }, setName:function(v){ this._p.name = v; }, isWork:function(){ return this._p.work; }, setWork:function(v){ this._p.work = v; }, getTarget:function(){ return this._p.target; }, setTarget:function(v){ this._p.target = _ymd(v); }, toString:function(){ return this._p.day+' '+this._p.name+(this._p.work?'调休':'')+' '+this._p.target; } }; }; var _buildHolidayForward = function(s){ var day = s.substr(0,8); var name = _NAMES[s.charCodeAt(8)-_ZERO]; var work = s.charCodeAt(9)===_ZERO; var target = s.substr(10,8); return _buildHoliday(day,name,work,target); }; var _buildHolidayBackward = function(s){ var size = s.length; var day = s.substr(size-18,8); var name = _NAMES[s.charCodeAt(size-10)-_ZERO]; var work = s.charCodeAt(size-9)===_ZERO; var target = s.substr(size-8); return _buildHoliday(day,name,work,target); }; var _findForward = function(key){ var start = _DATA.indexOf(key); if(start<0) { return null; } var right = _DATA.substr(start); var n = right.length%_SIZE; if(n>0){ right = right.substr(n); } while((0!==right.indexOf(key))&&right.length>=_SIZE){ right = right.substr(_SIZE); } return right; }; var _findBackward = function(key){ var start = _DATA.lastIndexOf(key); if(start<0) { return null; } var keySize = key.length; var left = _DATA.substr(0,start+keySize); var size = left.length; var n = size%_SIZE; if(n>0){ left = left.substr(0,size-n); } size = left.length; while((size-keySize!==left.lastIndexOf(key))&&size>=_SIZE){ left = left.substr(0,size-_SIZE); size = left.length; } return left; }; var _findHolidaysForward = function(key){ var l = []; var s = _findForward(key); if(null==s) { return l; } while(0===s.indexOf(key)){ l.push(_buildHolidayForward(s)); s = s.substr(_SIZE); } return l; }; var _findHolidaysBackward = function(key){ var l = []; var s = _findBackward(key); if(null==s) { return l; } var size = s.length; var keySize = key.length; while(size-keySize===s.lastIndexOf(key)){ l.push(_buildHolidayBackward(s)); s = s.substring(0,size-_SIZE); size = s.length; } l.reverse(); return l; }; var _getHoliday = function(args){ var l = []; switch(args.length){ case 1: l = _findHolidaysForward(args[0].replace(/-/g,'')); break; case 3: l = _findHolidaysForward(args[0]+_padding(args[1])+_padding(args[2])); break; } return l.length<1?null:l[0]; }; var _getHolidays = function(args){ var l = []; switch(args.length){ case 1: l = _findHolidaysForward((args[0]+'').replace(/-/g,'')); break; case 2: l = _findHolidaysForward(args[0]+_padding(args[1])); break; } return l; }; var _getHolidaysByTarget = function(args){ var l = []; switch(args.length){ case 1: l = _findHolidaysBackward((args[0]+'').replace(/-/g,'')); break; case 3: l = _findHolidaysBackward(args[0]+_padding(args[1])+_padding(args[2])); break; } return l; }; return { getHoliday:function(){return _getHoliday(arguments);}, getHolidays:function(){return _getHolidays(arguments);}, getHolidaysByTarget:function(){return _getHolidaysByTarget(arguments);} }; })(); return { SolarUtil:SolarUtil, LunarUtil:LunarUtil, Solar:Solar, Lunar:Lunar, SolarWeek:SolarWeek, SolarMonth:SolarMonth, SolarSeason:SolarSeason, SolarHalfYear:SolarHalfYear, SolarYear:SolarYear, HolidayUtil:HolidayUtil }; });