UNPKG

kor-lunar

Version:

한국 음력 변환 유틸 / Korean lunar calendar converter

3 lines (2 loc) 10.2 kB
var korLunar=function(n){"use strict";var t=function(n){return~~n},e=function(n,t,e){return n.length>=t?n:new Array(t-n.length+1).join(e)+n},r=[50342582,46534058,50360036,46403236,46402890,50222421,46533271,46400854,50345309,46533333,50367442,46401362,46534309,50223914,46401099,46533275,50416294,46400874,46533465,50342826,46401362,50359717,46402341,46402123,50354523,46533293,46400874,50341301,46533545,50363858,46402962,46402853,50355501,46401878,46400181,50481885,46401236,46534057,50343626,46403218,50226854,46400807,46533207,50420054,46533338,46401236,50411345,46401353,50428691,46402195,46400811,50423067,46532973,46533482,50417060,46402468,46402377,50343243,46402197,50363051,46400813,46533293,50420394,46534066,46402980,50413217,46402890,50367893,46402198,46400854,50357621,46533333,46401234,50349909,46534309,46403146,50214478,46533275,50363094,46400874,46533465,50355122,46401362,46401317,50350891,46402123,50366891,46400173,46531947,50423209,46534057,46402962,50351509,46402853,50376269,46402134,46400182,50490093,46401236,46534057,50355922,46403218,46402854,50214190,46533207,50366902,46533466,46401236,50354025,46401353,46401171,50350743,46400811,46533211,50342574,46400362,50494933,46402468,46402377,50355539,46402197,46400813,50410797,46533293,50371498,46400978,46534053,50355882,46402890,46402197,50350749,46400854,46533301,50342614,46401234,50358117,46534309,46403146,50222678,46533787,46400858,50345325,46533481,50380626,46401362,46402341,50424587,46402123,46400683,50352827,46531949,46533481,50343338,46402962,50364069,46402853,46402125,50420301,46400182,46532021,79569],o=["갑","을","병","정","무","기","경","신","임","계"],a=["자","축","인","묘","진","사","오","미","신","유","술","해"],i=1890,u=18900101,f=2050,c=11,l=20501118,y=[],h=function(n){return n=t(n),r[n-i]},s=function(n,e){return e=t(e),0===(h(n)>>e-1&1)?29:30},p=function(n){return h(n)>>12&15},g=function(n){return 0!==p(n)},_=function(n,e){return(e=t(e))===p(n)},D=function(n,t){return _(n,t)?0===(h(n)>>16&1)?29:30:0},v=function(n){return h(n)>>17&511};y[0]=0;for(var d=1891;d<=f;d++){y[A=d-i]=y[A-1]+v(d-1)}var M=function(n){return n=t(n),y[n-i]},j=function(n,e,r){e=t(e);for(var o=p(n),a=0,i=1;i<e;i++)a+=s(n,i),i===o&&(a+=D(n,i));return r&&o===e&&(a+=s(n,e)),a},m=function(n,e,r,o){return r=t(r),M(n)+j(n,e,o)+r},L=function(n){return g(n)?13:12},b=[];b[0]=0;for(d=1891;d<=f;d++){var A;b[A=d-i]=b[A-1]+L(d-1)}var w=function(n){return n=t(n),b[n-i]},S=function(n,t,e){return w(n)+X(n,t,e)+1},E=function(n){for(var e=(n=t(n))-1,r=i,o=f;r<o;){var a=r+o+1>>>1;b[a-i]<=e?r=a:o=a-1}var u=r,c=e-b[u-i],l=I(u,c);return{year:u,month:l.month,isLeapMonth:l.isLeapMonth}},O=2411389,T=O+m(f,c,18,!1)-1,Y=function(n){return n=t(n),o[(n+6)%o.length]+a[(n+8)%a.length]},B=function(n,e){return n=t(n),e=t(e),o[(2*n+e+3)%o.length]+a[(e+1)%a.length]},R=function(n){return n=t(n),o[(n-1)%o.length]+a[(n+1)%a.length]},P=function(n,e,r){var o=1e4*(n=t(n))+100*(e=t(e))+(r=t(r));return o>=u&&o<=l},k=function(n,e,r,o){if(n=t(n),e=t(e),r=t(r),n<i||n>f)return!1;if(n===i){if(e<1)return!1;if(1===e&&r<1)return!1}if(n===f){if(e>c)return!1;if(e===c&&r>18)return!1}return!(e<1||e>12)&&(!(r<1)&&r<=(o?D(n,e):s(n,e)))},X=function(n,e,r){var o=e=t(e);if(g(n)){var a=p(n);(r&&e===a||e>a)&&o++}return o-1},I=function(n,e){e=t(e);var r=p(n),o=!1,a=e;return r>0&&(a===r&&(o=!0),a>=r&&a--),{month:a+1,isLeapMonth:o}},W=Object.freeze({__proto__:null,BASE_DAY:1,BASE_JULIAN_DAY:O,BASE_MONTH:1,BASE_VALUE:u,BASE_YEAR:i,MAX_DAY:18,MAX_JULIAN_DAY:T,MAX_MONTH:c,MAX_VALUE:l,MAX_YEAR:f,fromTotalMonths:E,getIljin:function(n,t,e,r){var o=m(n,t,e,r);return R(o-1)},getIljinByJulianDay:R,getLeapMonth:p,getLeapMonthDays:D,getMonthCount:L,getMonthDays:s,getMonthFromIndex:I,getMonthIndex:X,getSecha:Y,getTotalDays:m,getTotalDaysBeforeMonth:j,getTotalDaysBeforeYear:M,getTotalMonths:S,getTotalMonthsBeforeYear:w,getWolgeon:B,getYearDays:v,hasLeapMonth:g,isDateInRange:P,isLeapMonth:_,isValidDate:k}),J=[31,28,31,30,31,30,31,31,30,31,30,31],N=1890,U=18900121,V=2050,H=20501231,C=[],x=function(n){return(n=t(n))%4==0&&n%100!=0||n%400==0},z=function(n,e){return 2===(e=t(e))&&x(n)?29:J[e-1]},F=function(n){return x(n)?366:365};C[0]=0;for(var q=1891;q<=V;q++){var G=q-N;C[G]=C[G-1]+F(q-1)}var K=function(n){return n=t(n),C[n-N]},Q=function(n,t){for(var e=0,r=1;r<t;r++)e+=z(n,r);return e},Z=function(n,t,e){return K(n)+Q(n,t)+e},$=function(n,e,r){var o=1e4*(n=t(n))+100*(e=t(e))+(r=t(r));return o>=U&&o<=H},nn=Object.freeze({__proto__:null,BASE_DAY:21,BASE_MONTH:1,BASE_VALUE:U,BASE_YEAR:N,MAX_DAY:31,MAX_MONTH:12,MAX_VALUE:H,MAX_YEAR:V,getMonthDays:z,getTotalDays:Z,getTotalDaysBeforeMonth:Q,getTotalDaysBeforeYear:K,getYearDays:F,isDateInRange:$,isLeapYear:x,isValidDate:function(n,e,r){if(n=t(n),e=t(e),r=t(r),n<N||n>V)return!1;if(n===N){if(e<1)return!1;if(1===e&&r<21)return!1}if(n===V){if(e>12)return!1;if(12===e&&r>31)return!1}return!(e<1||e>12)&&(!(r<1)&&r<=z(n,e))}}),tn=function(n,e,r){if(n=t(n),e=t(e),r=t(r),!$(n,e,r))throw new RangeError("지원되지 않는 날짜입니다. 입력한 날짜: ".concat(n,"-").concat(e,"-").concat(r));var o=Math.min(n,f),a=n>f?c:e,i=1,u=m(o,a,i,!0),l=Z(n,e,r);i+=l-20-u;for(var y=l-20,h=O+y-1,g=(y+1)%7,_=a===p(o);i<1;)_?_=!1:(0===--a&&(a=12,o--),_=a===p(o)),i+=_?D(o,a):s(o,a);return{year:o,month:a,day:i,isLeapMonth:_,secha:Y(o),wolgeon:_?"":B(o,a),iljin:R(h),julianDay:h,dayOfWeek:g}},en=function(n,e,r,o){if(n=t(n),e=t(e),r=t(r),!P(n,e,r))throw new RangeError("지원되지 않는 날짜입니다. 입력한 날짜: ".concat(n,"-").concat(e,"-").concat(r));for(var a=n,i=e,u=r+(m(n,e,r,o)-(Z(n,e,r)-20)),f=z(a,i);u>f;)u-=f,++i>12&&(i=1,a++),f=z(a,i);return{year:a,month:i,day:u}},rn=function(n){if((n=t(n))<O||n>T)throw new RangeError("지원되지 않는 julianDay입니다. 입력한 값: ".concat(n));for(var e=n-O+1,r=i,o=f;r<o;){var a=r+o+1>>>1;M(a)<e?r=a:o=a-1}for(var u,c=r,l=e-M(c),y=p(c),h=0,g=!1,_=1;_<=12;_++){if(l<=(u=s(c,_))){h=_,g=!1;break}if(l-=u,_===y){if(l<=(u=D(c,_))){h=_,g=!0;break}l-=u}}var v=(n-O+1+1)%7;return{year:c,month:h,day:l,isLeapMonth:g,secha:Y(c),wolgeon:g?"":B(c,h),iljin:R(n),julianDay:n,dayOfWeek:v}},on=W,an=nn,un=function(){function n(n){if(n<O||n>T)throw new RangeError("지원되지 않는 julianDay입니다. 입력한 값: ".concat(n));this._julianDay=n}return n.of=function(t,e,r,o){if(void 0===o&&(o=!1),!k(t,e,r,o)){var a=o?"(윤)":"";throw new RangeError("유효하지 않은 음력 날짜입니다: ".concat(t,"-").concat(e,"-").concat(r).concat(a))}var i=m(t,e,r,o);return new n(O+i-1)},n.from=function(t){return new n(t.julianDay)},n.fromSolar=function(t,e,r){return new n(tn(t,e,r).julianDay)},n.fromJulianDay=function(t){return new n(t)},n.today=function(){var t=new Date;return n.fromSolar(t.getFullYear(),t.getMonth()+1,t.getDate())},n.prototype._resolve=function(){return this._cache||(this._cache=rn(this._julianDay)),this._cache},Object.defineProperty(n.prototype,"year",{get:function(){return this._resolve().year},enumerable:!1,configurable:!0}),Object.defineProperty(n.prototype,"month",{get:function(){return this._resolve().month},enumerable:!1,configurable:!0}),Object.defineProperty(n.prototype,"day",{get:function(){return this._resolve().day},enumerable:!1,configurable:!0}),Object.defineProperty(n.prototype,"isLeapMonth",{get:function(){return this._resolve().isLeapMonth},enumerable:!1,configurable:!0}),Object.defineProperty(n.prototype,"julianDay",{get:function(){return this._julianDay},enumerable:!1,configurable:!0}),Object.defineProperty(n.prototype,"dayOfWeek",{get:function(){return this._resolve().dayOfWeek},enumerable:!1,configurable:!0}),Object.defineProperty(n.prototype,"secha",{get:function(){return this._resolve().secha},enumerable:!1,configurable:!0}),Object.defineProperty(n.prototype,"wolgeon",{get:function(){return this._resolve().wolgeon},enumerable:!1,configurable:!0}),Object.defineProperty(n.prototype,"iljin",{get:function(){return this._resolve().iljin},enumerable:!1,configurable:!0}),n.prototype.addDays=function(t){return new n(this._julianDay+t)},n.prototype.addMonths=function(t){var e=this._resolve(),r=S(e.year,e.month,e.isLeapMonth),o=E(r+t),a=o.year,i=o.month,u=o.isLeapMonth,f=u?D(a,i):s(a,i),c=Math.min(e.day,f);return n.of(a,i,c,u)},n.prototype.addYears=function(t){var e=this._resolve(),r=e.year+t,o=e.isLeapMonth;o&&p(r)!==e.month&&(o=!1);var a=o?D(r,e.month):s(r,e.month),i=Math.min(e.day,a);return n.of(r,e.month,i,o)},n.prototype.toSolar=function(){var n=this._resolve();return en(n.year,n.month,n.day,n.isLeapMonth)},n.prototype.toLunarDate=function(){var n=this._resolve();return{year:n.year,month:n.month,day:n.day,isLeapMonth:n.isLeapMonth,secha:n.secha,wolgeon:n.wolgeon,iljin:n.iljin,julianDay:n.julianDay,dayOfWeek:n.dayOfWeek}},n.prototype.equals=function(n){return this._julianDay===n._julianDay},n.prototype.isBefore=function(n){return this._julianDay<n._julianDay},n.prototype.isAfter=function(n){return this._julianDay>n._julianDay},n.prototype.diffDays=function(n){return this._julianDay-n._julianDay},n.prototype.toString=function(){var n=this._resolve(),t=e(n.month.toString(),2,"0"),r=e(n.day.toString(),2,"0"),o=n.isLeapMonth?"윤".concat(t):t;return"".concat(n.year,"-").concat(o,"-").concat(r)},n.prototype.toTraditionalString=function(){var n,t=this._resolve(),e=["하루","이틀","사흘","나흘","닷새","엿새","이레","여드레","아흐레","열흘"],r=(t.isLeapMonth?"윤":"")+["정월","이월","삼월","사월","오월","유월","칠월","팔월","구월","시월","동짓달","섣달"][t.month-1],o=t.isLeapMonth?D(t.year,t.month):s(t.year,t.month);return n=t.day===o?"그믐":t.day<=10?"초"+e[t.day-1]:15===t.day?"보름":t.day<20?"열"+e[t.day-11]:20===t.day?"스무날":"스무"+e[t.day-21],"".concat(t.secha,"년 ").concat(r," ").concat(n)},n}(),fn={toLunar:tn,toSolar:en,fromJulianDay:rn,LunarTable:W,SolarTable:nn,LunarData:on,SolarData:an,LunarCalendar:un};return n.LunarCalendar=un,n.LunarData=on,n.LunarTable=W,n.SolarData=an,n.SolarTable=nn,n.default=fn,n.fromJulianDay=rn,n.toLunar=tn,n.toSolar=en,Object.defineProperty(n,"__esModule",{value:!0}),n}({}); //# sourceMappingURL=kor-lunar.min.js.map