From 951d4bfb3261e13e2f2a0d6ab621b113bcbbcab9 Mon Sep 17 00:00:00 2001 From: 6tail <6tail@6tail.cn> Date: Sun, 5 May 2019 17:17:13 +0800 Subject: [PATCH] optimized codes and fix negative month bug @ Lunar.getXiu() --- lunar.js | 122 ++++++++++++++++++++++++++----------------------------- 1 file changed, 58 insertions(+), 64 deletions(-) diff --git a/lunar.js b/lunar.js index d10e108..bae2746 100644 --- a/lunar.js +++ b/lunar.js @@ -4,7 +4,7 @@ return _fromYmd(date.getFullYear(),date.getMonth()+1,date.getDate()); }; var _fromYmd = function(y,m,d){ - var solar = { + return { _p:{ year:y, month:m, @@ -88,7 +88,6 @@ return Lunar.fromDate(this._p.calendar); } }; - return solar; }; return { fromYmd:function(y,m,d){return _fromYmd(y,m,d);}, @@ -118,12 +117,12 @@ lunarM = 11; lunarD = 25; } - var diff = 0; - for(var i=startY;ilastDate){ lunarD -= lastDate; lunarM = LunarUtil.nextMonth(lunarY,lunarM); - if(lunarM==1) lunarY++; + if(lunarM===1) lunarY++; lastDate = LunarUtil.getDaysOfMonth(lunarY,lunarM); } return _fromYmd(lunarY,lunarM,lunarD,solar); @@ -154,8 +153,8 @@ while(true){ diff += LunarUtil.getDaysOfMonth(y,m); m = LunarUtil.nextMonth(y,m); - if(m==1) y++; - if(y==this._p.year&&m==this._p.month){ + if(m===1) y++; + if(y===this._p.year&&m===this._p.month){ diff += this._p.day; break; } @@ -204,10 +203,10 @@ index++; } var term = LunarUtil.JIE_MAP[solarMonth-1][4*index+ry%4]; - if(ry==121&&solarMonth==4) term = 5; - if(ry==132&&solarMonth==4) term = 5; - if(ry==194&&solarMonth==6) term = 6; - if(solarDay==term) s = LunarUtil.JIE[solarMonth-1]; + if(ry===121&&solarMonth===4) term = 5; + if(ry===132&&solarMonth===4) term = 5; + if(ry===194&&solarMonth===6) term = 6; + if(solarDay===term) s = LunarUtil.JIE[solarMonth-1]; return s; }, getQi:function(){ @@ -221,13 +220,13 @@ index++; } var term = LunarUtil.QI_MAP[solarMonth-1][4*index+ry%4]; - if(ry==171&&solarMonth==3) term = 21; - if(ry==181&&solarMonth==5) term = 21; - if(solarDay==term) s = LunarUtil.QI[solarMonth-1]; + if(ry===171&&solarMonth===3) term = 21; + if(ry===181&&solarMonth===5) term = 21; + if(solarDay===term) s = LunarUtil.QI[solarMonth-1]; return s; }, getXiu:function(){ - return LunarUtil.XIU[this._p.day-1][this._p.month-1]; + return LunarUtil.XIU[this._p.day-1][Math.abs(this._p.month)-1]; }, getZheng:function(){ return LunarUtil.ZHENG[this.getXiu()]; @@ -282,7 +281,7 @@ return _fromYmd(date.getFullYear(),date.getMonth()+1,date.getDate(),start); }; var _fromYmd = function(y,m,d,start){ - var solarWeek = { + return { _p:{ year:y, month:m, @@ -304,7 +303,7 @@ }, /** * 获取当前日期是在当月第几周 - * @return 周序号,从1开始 + * @return number 周序号,从1开始 */ getIndex:function(){ var firstDate = new Date(this._p.year+'/'+this._p.month+'/1'); @@ -315,26 +314,27 @@ * 周推移 * @param weeks 推移的周数,负数为倒推 * @param separateMonth 是否按月单独计算 - * @return 推移后的阳历周 + * @return object 推移后的阳历周 */ next:function(weeks,separateMonth){ - if(0==weeks){ + if(0===weeks){ return _fromYmd(this._p.year,this._p.month,this._p.day,this._p.start); } + var date; if(separateMonth){ var n = weeks; - var date = new Date(this._p.year+'/'+this._p.month+'/'+this._p.day); + 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){ + while(0!==n){ date.setDate(date.getDate()+(plus?7:-7)); week = _fromDate(date,this._p.start); var weekMonth = week.getMonth(); - if(month!=weekMonth){ + if(month!==weekMonth){ var index = week.getIndex(); if(plus){ - if(1==index){ + if(1===index){ var firstDay = week.getFirstDay(); week = _fromYmd(firstDay.getYear(),firstDay.getMonth(),firstDay.getDay(),this._p.start); weekMonth = week.getMonth(); @@ -344,9 +344,8 @@ } }else{ var size = SolarUtil.getWeeksOfMonth(week.getYear(),week.getMonth(),this._p.start); - if(size==index){ - var firstDay = week.getFirstDay(); - var lastDay = firstDay.next(6); + if(size===index){ + var lastDay = week.getFirstDay().next(6); week = _fromYmd(lastDay.getYear(),lastDay.getMonth(),lastDay.getDay(),this._p.start); weekMonth = week.getMonth(); }else{ @@ -360,14 +359,14 @@ } return week; }else{ - var date = new Date(this._p.year+'/'+this._p.month+'/'+this._p.day); + 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 本周第一天的阳历日期 + * @return object 本周第一天的阳历日期 */ getFirstDay:function(){ var date = new Date(this._p.year+'/'+this._p.month+'/'+this._p.day); @@ -381,13 +380,13 @@ }, /** * 获取本周第一天的阳历日期(仅限当月) - * @return 本周第一天的阳历日期 + * @return object 本周第一天的阳历日期 */ getFirstDayInMonth:function(){ var days = this.getDays(); for(var i = 0;i>4)&0x0F; - if(v==m){ + if(v===m){ n = -m; } } - if(n==13) n = 1; + if(n===13) n = 1; return n; }, getDaysOfMonth:function(year,month){ @@ -780,24 +774,24 @@ if(1<=month&&month<=8){ v = this.LUNAR_MONTH[2*index]; l = month-1; - if(((v>>l)&0x01)==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){ + if(((v>>l)&0x01)===1){ d = 29; } }else{ v = this.LUNAR_MONTH[2*index+1]; v = (v>>4)&0x0F; - if(v!=Math.abs(month)){ + if(v!==Math.abs(month)){ d = 0; }else{ d = 29; for(var i = 0;i