kor-lunar 1.1.2 → 1.2.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +27 -7
- package/dist/kor-lunar.d.ts +3 -0
- package/dist/kor-lunar.esm.js +36 -1
- package/dist/kor-lunar.esm.js.map +1 -1
- package/dist/kor-lunar.js +36 -1
- package/dist/kor-lunar.js.map +1 -1
- package/dist/kor-lunar.min.js +1 -1
- package/dist/lunar-data.d.ts +4 -0
- package/package.json +3 -3
package/README.md
CHANGED
|
@@ -6,9 +6,11 @@
|
|
|
6
6
|
|
|
7
7
|
## 특징
|
|
8
8
|
|
|
9
|
-
-
|
|
10
|
-
-
|
|
11
|
-
-
|
|
9
|
+
- **음력 ↔ 양력 변환** 지원
|
|
10
|
+
- **윤달 처리** 가능 (`isLeapMonth` 옵션)
|
|
11
|
+
- **음력 간지 출력**: 세차(`secha`), 월건(`wolgeon`), 일진(`iljin`) 포함
|
|
12
|
+
- 윤달인 경우 `wolgeon`은 빈 문자열로 반환됩니다
|
|
13
|
+
- **오프라인** 환경에서도 사용 가능
|
|
12
14
|
|
|
13
15
|
## 지원 날짜 범위
|
|
14
16
|
|
|
@@ -36,7 +38,7 @@ const korLunar = require("kor-lunar");
|
|
|
36
38
|
### 브라우저 CDN
|
|
37
39
|
|
|
38
40
|
```html
|
|
39
|
-
<script src="https://cdn.jsdelivr.net/npm/kor-lunar/dist/kor-lunar.min.js"></script>
|
|
41
|
+
<script src="https://cdn.jsdelivr.net/npm/kor-lunar@1.2.1/dist/kor-lunar.min.js"></script>
|
|
40
42
|
```
|
|
41
43
|
|
|
42
44
|
## 예제
|
|
@@ -44,15 +46,33 @@ const korLunar = require("kor-lunar");
|
|
|
44
46
|
```js
|
|
45
47
|
import korLunar from "kor-lunar";
|
|
46
48
|
|
|
47
|
-
// 양력 → 음력
|
|
49
|
+
// 양력 → 음력
|
|
48
50
|
console.log(korLunar.toLunar(2025, 6, 25));
|
|
49
|
-
// {
|
|
51
|
+
// {
|
|
52
|
+
// year: 2025,
|
|
53
|
+
// month: 6,
|
|
54
|
+
// day: 1,
|
|
55
|
+
// isLeapMonth: false,
|
|
56
|
+
// secha: '을사',
|
|
57
|
+
// wolgeon: '계미',
|
|
58
|
+
// iljin: '을축'
|
|
59
|
+
// }
|
|
60
|
+
|
|
50
61
|
console.log(korLunar.toLunar(2025, 7, 25));
|
|
51
|
-
// {
|
|
62
|
+
// {
|
|
63
|
+
// year: 2025,
|
|
64
|
+
// month: 6,
|
|
65
|
+
// day: 1,
|
|
66
|
+
// isLeapMonth: true,
|
|
67
|
+
// secha: '을사',
|
|
68
|
+
// wolgeon: '', // 윤달인 경우 월건은 빈 문자열
|
|
69
|
+
// iljin: '을미'
|
|
70
|
+
// }
|
|
52
71
|
|
|
53
72
|
// 음력 → 양력
|
|
54
73
|
console.log(korLunar.toSolar(2025, 6, 1, false));
|
|
55
74
|
// { year: 2025, month: 6, day: 25 }
|
|
75
|
+
|
|
56
76
|
console.log(korLunar.toSolar(2025, 6, 1, true));
|
|
57
77
|
// { year: 2025, month: 7, day: 25 }
|
|
58
78
|
```
|
package/dist/kor-lunar.d.ts
CHANGED
package/dist/kor-lunar.esm.js
CHANGED
|
@@ -28,6 +28,8 @@ var LUN_TABLE = [
|
|
|
28
28
|
/*2030*/ 0x2c4055a, 0x300356d, 0x2c60b69, 0x300bf52, 0x2c40752, 0x2c40b25, 0x3016b0b, 0x2c40a4b, 0x2c404ab, 0x30052bb,
|
|
29
29
|
/*2040*/ 0x2c6056d, 0x2c60b69, 0x3002daa, 0x2c40d92, 0x3007ea5, 0x2c40d25, 0x2c40a4d, 0x3015a4d, 0x2c402b6, 0x2c605b5,
|
|
30
30
|
];
|
|
31
|
+
var gan = ["갑", "을", "병", "정", "무", "기", "경", "신", "임", "계"];
|
|
32
|
+
var ji = ["자", "축", "인", "묘", "진", "사", "오", "미", "신", "유", "술", "해"];
|
|
31
33
|
var BASE_YEAR$1 = 1890;
|
|
32
34
|
var BASE_MONTH$1 = 1;
|
|
33
35
|
var BASE_DAY$1 = 1;
|
|
@@ -153,6 +155,26 @@ var getTotalDays$1 = function (year, month, day, isLeapMonth) {
|
|
|
153
155
|
var days = getTotalDaysBeforeYear$1(year) + getTotalDaysBeforeMonth$1(year, month, isLeapMonth) + day;
|
|
154
156
|
return days;
|
|
155
157
|
};
|
|
158
|
+
var getSecha = function (year) {
|
|
159
|
+
var g = gan[(year + 6) % gan.length];
|
|
160
|
+
var j = ji[(year + 8) % ji.length];
|
|
161
|
+
return g + j;
|
|
162
|
+
};
|
|
163
|
+
var getWolgeon = function (year, month) {
|
|
164
|
+
var g = gan[(year * 2 + month + 3) % gan.length];
|
|
165
|
+
var j = ji[(month + 1) % ji.length];
|
|
166
|
+
return g + j;
|
|
167
|
+
};
|
|
168
|
+
var getIljinByDayIndex = function (dayIndex) {
|
|
169
|
+
dayIndex += 1;
|
|
170
|
+
var g = gan[(dayIndex + 7) % gan.length];
|
|
171
|
+
var j = ji[(dayIndex + 1) % ji.length];
|
|
172
|
+
return g + j;
|
|
173
|
+
};
|
|
174
|
+
var getIljin = function (year, month, day, isLeapMonth) {
|
|
175
|
+
var days = getTotalDays$1(year, month, day, isLeapMonth);
|
|
176
|
+
return getIljinByDayIndex(days - 1);
|
|
177
|
+
};
|
|
156
178
|
var LunarData = {
|
|
157
179
|
BASE_YEAR: BASE_YEAR$1,
|
|
158
180
|
BASE_MONTH: BASE_MONTH$1,
|
|
@@ -172,6 +194,10 @@ var LunarData = {
|
|
|
172
194
|
getTotalDaysBeforeYear: getTotalDaysBeforeYear$1,
|
|
173
195
|
getTotalDaysBeforeMonth: getTotalDaysBeforeMonth$1,
|
|
174
196
|
getTotalDays: getTotalDays$1,
|
|
197
|
+
getSecha: getSecha,
|
|
198
|
+
getWolgeon: getWolgeon,
|
|
199
|
+
getIljin: getIljin,
|
|
200
|
+
getIljinByDayIndex: getIljinByDayIndex,
|
|
175
201
|
};
|
|
176
202
|
|
|
177
203
|
var MONTH_DAYS = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];
|
|
@@ -249,6 +275,7 @@ var toLunar = function (solYear, solMonth, solDay) {
|
|
|
249
275
|
var year = LunarData.BASE_YEAR;
|
|
250
276
|
var month = LunarData.BASE_MONTH;
|
|
251
277
|
var day = LunarData.BASE_DAY + SolarData.getTotalDays(solYear, solMonth, solDay) - SOLAR_LUNAR_DAY_DIFF - 1;
|
|
278
|
+
var dayIndex = day - 1;
|
|
252
279
|
var yearDays = LunarData.getYearDays(year);
|
|
253
280
|
while (day > yearDays) {
|
|
254
281
|
year++;
|
|
@@ -275,7 +302,15 @@ var toLunar = function (solYear, solMonth, solDay) {
|
|
|
275
302
|
}
|
|
276
303
|
monthDays = LunarData.getMonthDays(year, month);
|
|
277
304
|
}
|
|
278
|
-
return {
|
|
305
|
+
return {
|
|
306
|
+
year: year,
|
|
307
|
+
month: month,
|
|
308
|
+
day: day,
|
|
309
|
+
isLeapMonth: isLeapMonth,
|
|
310
|
+
secha: LunarData.getSecha(year),
|
|
311
|
+
wolgeon: isLeapMonth ? "" : LunarData.getWolgeon(year, month),
|
|
312
|
+
iljin: LunarData.getIljinByDayIndex(dayIndex),
|
|
313
|
+
};
|
|
279
314
|
};
|
|
280
315
|
var toSolar = function (lunYear, lunMonth, lunDay, isLeapMonth) {
|
|
281
316
|
if (!LunarData.checkRangeDate(lunYear, lunMonth, lunDay)) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"kor-lunar.esm.js","sources":[],"sourcesContent":[],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"kor-lunar.esm.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|
package/dist/kor-lunar.js
CHANGED
|
@@ -32,6 +32,8 @@ var LUN_TABLE = [
|
|
|
32
32
|
/*2030*/ 0x2c4055a, 0x300356d, 0x2c60b69, 0x300bf52, 0x2c40752, 0x2c40b25, 0x3016b0b, 0x2c40a4b, 0x2c404ab, 0x30052bb,
|
|
33
33
|
/*2040*/ 0x2c6056d, 0x2c60b69, 0x3002daa, 0x2c40d92, 0x3007ea5, 0x2c40d25, 0x2c40a4d, 0x3015a4d, 0x2c402b6, 0x2c605b5,
|
|
34
34
|
];
|
|
35
|
+
var gan = ["갑", "을", "병", "정", "무", "기", "경", "신", "임", "계"];
|
|
36
|
+
var ji = ["자", "축", "인", "묘", "진", "사", "오", "미", "신", "유", "술", "해"];
|
|
35
37
|
var BASE_YEAR$1 = 1890;
|
|
36
38
|
var BASE_MONTH$1 = 1;
|
|
37
39
|
var BASE_DAY$1 = 1;
|
|
@@ -157,6 +159,26 @@ var getTotalDays$1 = function (year, month, day, isLeapMonth) {
|
|
|
157
159
|
var days = getTotalDaysBeforeYear$1(year) + getTotalDaysBeforeMonth$1(year, month, isLeapMonth) + day;
|
|
158
160
|
return days;
|
|
159
161
|
};
|
|
162
|
+
var getSecha = function (year) {
|
|
163
|
+
var g = gan[(year + 6) % gan.length];
|
|
164
|
+
var j = ji[(year + 8) % ji.length];
|
|
165
|
+
return g + j;
|
|
166
|
+
};
|
|
167
|
+
var getWolgeon = function (year, month) {
|
|
168
|
+
var g = gan[(year * 2 + month + 3) % gan.length];
|
|
169
|
+
var j = ji[(month + 1) % ji.length];
|
|
170
|
+
return g + j;
|
|
171
|
+
};
|
|
172
|
+
var getIljinByDayIndex = function (dayIndex) {
|
|
173
|
+
dayIndex += 1;
|
|
174
|
+
var g = gan[(dayIndex + 7) % gan.length];
|
|
175
|
+
var j = ji[(dayIndex + 1) % ji.length];
|
|
176
|
+
return g + j;
|
|
177
|
+
};
|
|
178
|
+
var getIljin = function (year, month, day, isLeapMonth) {
|
|
179
|
+
var days = getTotalDays$1(year, month, day, isLeapMonth);
|
|
180
|
+
return getIljinByDayIndex(days - 1);
|
|
181
|
+
};
|
|
160
182
|
var LunarData = {
|
|
161
183
|
BASE_YEAR: BASE_YEAR$1,
|
|
162
184
|
BASE_MONTH: BASE_MONTH$1,
|
|
@@ -176,6 +198,10 @@ var LunarData = {
|
|
|
176
198
|
getTotalDaysBeforeYear: getTotalDaysBeforeYear$1,
|
|
177
199
|
getTotalDaysBeforeMonth: getTotalDaysBeforeMonth$1,
|
|
178
200
|
getTotalDays: getTotalDays$1,
|
|
201
|
+
getSecha: getSecha,
|
|
202
|
+
getWolgeon: getWolgeon,
|
|
203
|
+
getIljin: getIljin,
|
|
204
|
+
getIljinByDayIndex: getIljinByDayIndex,
|
|
179
205
|
};
|
|
180
206
|
|
|
181
207
|
var MONTH_DAYS = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];
|
|
@@ -253,6 +279,7 @@ var toLunar = function (solYear, solMonth, solDay) {
|
|
|
253
279
|
var year = LunarData.BASE_YEAR;
|
|
254
280
|
var month = LunarData.BASE_MONTH;
|
|
255
281
|
var day = LunarData.BASE_DAY + SolarData.getTotalDays(solYear, solMonth, solDay) - SOLAR_LUNAR_DAY_DIFF - 1;
|
|
282
|
+
var dayIndex = day - 1;
|
|
256
283
|
var yearDays = LunarData.getYearDays(year);
|
|
257
284
|
while (day > yearDays) {
|
|
258
285
|
year++;
|
|
@@ -279,7 +306,15 @@ var toLunar = function (solYear, solMonth, solDay) {
|
|
|
279
306
|
}
|
|
280
307
|
monthDays = LunarData.getMonthDays(year, month);
|
|
281
308
|
}
|
|
282
|
-
return {
|
|
309
|
+
return {
|
|
310
|
+
year: year,
|
|
311
|
+
month: month,
|
|
312
|
+
day: day,
|
|
313
|
+
isLeapMonth: isLeapMonth,
|
|
314
|
+
secha: LunarData.getSecha(year),
|
|
315
|
+
wolgeon: isLeapMonth ? "" : LunarData.getWolgeon(year, month),
|
|
316
|
+
iljin: LunarData.getIljinByDayIndex(dayIndex),
|
|
317
|
+
};
|
|
283
318
|
};
|
|
284
319
|
var toSolar = function (lunYear, lunMonth, lunDay, isLeapMonth) {
|
|
285
320
|
if (!LunarData.checkRangeDate(lunYear, lunMonth, lunDay)) {
|
package/dist/kor-lunar.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"kor-lunar.js","sources":[],"sourcesContent":[],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"kor-lunar.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|
package/dist/kor-lunar.min.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
var korLunar=function(
|
|
1
|
+
var korLunar=function(n){"use strict";var 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],t=["갑","을","병","정","무","기","경","신","임","계"],o=["자","축","인","묘","진","사","오","미","신","유","술","해"],u=1890,e=18900101,c=2049,a=20491229,f={},i=function(n){return r[n-u]},v=function(n,r){return 0===(i(n)>>r-1&1)?29:30},l=function(n){return i(n)>>12&15},h=function(n,r){return r===l(n)},g=function(n,r){return h(n,r)?0===(i(n)>>16&1)?29:30:0},d=function(n){return i(n)>>17&511};f[1890]=0;for(var s=1891;s<=c;s++)f[s]=f[s-1]+d(s-1);var w=function(n){return f[n]},y=function(n,r,t){for(var o=0,u=1;u<r;u++)o+=v(n,u),u===l(n)&&(o+=g(n,u));var e=l(n);return t&&e===r&&(o+=v(n,r)),o},L=function(n,r,t,o){return w(n)+y(n,r,o)+t},j=function(n){return t[((n+=1)+7)%t.length]+o[(n+1)%o.length]},m=u,p=1,E=1,M=function(n,r,t){var o=1e4*n+100*r+t;return o>=e&&o<=a},R=v,S=l,_=g,b=d,k=L,O=function(n){return t[(n+6)%t.length]+o[(n+8)%o.length]},P=function(n,r){return t[(2*n+r+3)%t.length]+o[(r+1)%o.length]},q=j,x=[31,28,31,30,31,30,31,31,30,31,30,31],z=1890,A=18900121,B=2050,C=20500122,D={},F=function(n){return n%4==0&&n%100!=0||n%400==0},G=function(n,r){return 2==r&&F(n)?29:x[r-1]},H=function(n){return F(n)?366:365};D[1890]=0;for(var I=1891;I<=B;I++)D[I]=D[I-1]+H(I-1);var J=z,K=1,N=21,Q=function(n,r,t){var o=1e4*n+100*r+t;return o>=A&&o<=C},T=G,U=H,V=function(n,r,t){var o=function(n){return D[n]}(n)+function(n,r){for(var t=0,o=1;o<r;o++)t+=G(n,o);return t}(n,r)+t;return o},W=function(n,r,t){if(!Q(n,r,t))throw new RangeError("지원되지 않는 날짜입니다. 입력한 날짜: ".concat(n,"-").concat(r,"-").concat(t));for(var o=m,u=p,e=E+V(n,r,t)-20-1,c=e-1,a=b(o);e>a;)o++,e-=a,a=b(o);for(var f=!1,i=S(o),v=R(o,u);e>v;)e-=v,f=!1,u!==i?(++u>12&&(u=1,o++,i=S(o)),v=R(o,u)):(i=0,v=_(o,u),f=!0);return{year:o,month:u,day:e,isLeapMonth:f,secha:O(o),wolgeon:f?"":P(o,u),iljin:q(c)}},X=function(n,r,t,o){if(!M(n,r,t))throw new RangeError("지원되지 않는 날짜입니다. 입력한 날짜: ".concat(n,"-").concat(r,"-").concat(t));for(var u=J,e=K,c=N+k(n,r,t,o)-1,a=U(u);c>a;)c-=a,u++,a=U(u);for(var f=T(u,e);c>f;)c-=f,++e>12&&(e=1,u++),f=T(u,e);return{year:u,month:e,day:c}},Y={toLunar:W,toSolar:X};return n.default=Y,n.toLunar=W,n.toSolar=X,Object.defineProperty(n,"__esModule",{value:!0}),n}({});
|
|
2
2
|
//# sourceMappingURL=kor-lunar.min.js.map
|
package/dist/lunar-data.d.ts
CHANGED
|
@@ -17,4 +17,8 @@ export declare const LunarData: {
|
|
|
17
17
|
getTotalDaysBeforeYear: (year: number) => number;
|
|
18
18
|
getTotalDaysBeforeMonth: (year: number, month: number, isLeapMonth: boolean) => number;
|
|
19
19
|
getTotalDays: (year: number, month: number, day: number, isLeapMonth: boolean) => number;
|
|
20
|
+
getSecha: (year: number) => string;
|
|
21
|
+
getWolgeon: (year: number, month: number) => string;
|
|
22
|
+
getIljin: (year: number, month: number, day: number, isLeapMonth: boolean) => string;
|
|
23
|
+
getIljinByDayIndex: (dayIndex: number) => string;
|
|
20
24
|
};
|
package/package.json
CHANGED
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "kor-lunar",
|
|
3
|
-
"version": "1.1
|
|
3
|
+
"version": "1.2.1",
|
|
4
4
|
"description": "한국 음력 변환 유틸 / Korean lunar calendar converter",
|
|
5
5
|
"main": "dist/kor-lunar.js",
|
|
6
6
|
"module": "dist/kor-lunar.esm.js",
|
|
7
|
+
"browser": "dist/kor-lunar.min.js",
|
|
7
8
|
"types": "dist/kor-lunar.d.ts",
|
|
8
9
|
"exports": {
|
|
9
10
|
".": {
|
|
@@ -17,6 +18,7 @@
|
|
|
17
18
|
],
|
|
18
19
|
"scripts": {
|
|
19
20
|
"build": "rollup -c",
|
|
21
|
+
"version": "node update-readme-version.js && git add README.md",
|
|
20
22
|
"postversion": "git push && git push --tags"
|
|
21
23
|
},
|
|
22
24
|
"repository": {
|
|
@@ -38,8 +40,6 @@
|
|
|
38
40
|
},
|
|
39
41
|
"homepage": "https://github.com/kahyou22/kor-lunar-js#readme",
|
|
40
42
|
"devDependencies": {
|
|
41
|
-
"@rollup/plugin-commonjs": "^28.0.3",
|
|
42
|
-
"@rollup/plugin-node-resolve": "^16.0.1",
|
|
43
43
|
"rollup": "^2.79.2",
|
|
44
44
|
"rollup-plugin-terser": "^7.0.2",
|
|
45
45
|
"rollup-plugin-typescript2": "^0.36.0",
|