kor-lunar 1.5.0 → 1.5.2
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 +1 -1
- package/dist/kor-lunar.esm.js +58 -60
- package/dist/kor-lunar.esm.js.map +1 -1
- package/dist/kor-lunar.js +59 -61
- package/dist/kor-lunar.js.map +1 -1
- package/dist/kor-lunar.min.js +1 -1
- package/dist/kor-lunar.min.js.map +1 -1
- package/dist/lunar-table.d.ts +2 -2
- package/package.json +6 -4
package/README.md
CHANGED
|
@@ -35,7 +35,7 @@ npm install kor-lunar
|
|
|
35
35
|
### 브라우저 CDN
|
|
36
36
|
|
|
37
37
|
```html
|
|
38
|
-
<script src="https://cdn.jsdelivr.net/npm/kor-lunar@1.
|
|
38
|
+
<script src="https://cdn.jsdelivr.net/npm/kor-lunar@1.5/dist/kor-lunar.min.js"></script>
|
|
39
39
|
```
|
|
40
40
|
|
|
41
41
|
CDN 사용 시 전역 변수 `korLunar`로 접근할 수 있습니다.
|
package/dist/kor-lunar.esm.js
CHANGED
|
@@ -1,7 +1,5 @@
|
|
|
1
1
|
var toInt = function (num) {
|
|
2
|
-
|
|
3
|
-
return ~~num;
|
|
4
|
-
return num;
|
|
2
|
+
return ~~num;
|
|
5
3
|
};
|
|
6
4
|
|
|
7
5
|
/**
|
|
@@ -47,7 +45,7 @@ var MAX_DAY$1 = 18;
|
|
|
47
45
|
var MAX_VALUE$1 = MAX_YEAR$1 * 10000 + MAX_MONTH$1 * 100 + MAX_DAY$1;
|
|
48
46
|
var SMALL_MONTH_DAY = 29;
|
|
49
47
|
var BIG_MONTH_DAY = 30;
|
|
50
|
-
var totalDaysBeforeYear$1 =
|
|
48
|
+
var totalDaysBeforeYear$1 = [];
|
|
51
49
|
var getYearData = function (year) {
|
|
52
50
|
year = toInt(year);
|
|
53
51
|
return LUN_TABLE[year - BASE_YEAR$1];
|
|
@@ -113,9 +111,10 @@ var getYearDays$1 = function (year) {
|
|
|
113
111
|
* 연도별 누적 일 수를 초기에 룩업 테이블로 생성하여
|
|
114
112
|
* O(1)으로 누적 일 수를 가져오게 변환함
|
|
115
113
|
*/
|
|
116
|
-
totalDaysBeforeYear$1[
|
|
114
|
+
totalDaysBeforeYear$1[0] = 0;
|
|
117
115
|
for (var y$1 = BASE_YEAR$1 + 1; y$1 <= MAX_YEAR$1; y$1++) {
|
|
118
|
-
|
|
116
|
+
var idx$1 = y$1 - BASE_YEAR$1;
|
|
117
|
+
totalDaysBeforeYear$1[idx$1] = totalDaysBeforeYear$1[idx$1 - 1] + getYearDays$1(y$1 - 1);
|
|
119
118
|
}
|
|
120
119
|
/**
|
|
121
120
|
* 1890년부터 해당 연도 전까지의 누적 일 수를 반환합니다.
|
|
@@ -124,8 +123,7 @@ for (var y$1 = BASE_YEAR$1 + 1; y$1 <= MAX_YEAR$1; y$1++) {
|
|
|
124
123
|
*/
|
|
125
124
|
var getTotalDaysBeforeYear$1 = function (year) {
|
|
126
125
|
year = toInt(year);
|
|
127
|
-
|
|
128
|
-
return days;
|
|
126
|
+
return totalDaysBeforeYear$1[year - BASE_YEAR$1];
|
|
129
127
|
};
|
|
130
128
|
/**
|
|
131
129
|
* 해당 연도 내에서 해당 월 (및 윤달 포함) 전까지의 누적 일 수를 반환합니다.
|
|
@@ -136,16 +134,16 @@ var getTotalDaysBeforeYear$1 = function (year) {
|
|
|
136
134
|
*/
|
|
137
135
|
var getTotalDaysBeforeMonth$1 = function (year, month, isLeapMonth) {
|
|
138
136
|
month = toInt(month);
|
|
137
|
+
var leapMonth = getLeapMonth(year);
|
|
139
138
|
var days = 0;
|
|
140
139
|
// 해당 월 전까지 윤달을 포함하여 누적
|
|
141
140
|
for (var m = 1; m < month; m++) {
|
|
142
141
|
days += getMonthDays$1(year, m);
|
|
143
|
-
if (m ===
|
|
142
|
+
if (m === leapMonth) {
|
|
144
143
|
days += getLeapMonthDays(year, m);
|
|
145
144
|
}
|
|
146
145
|
}
|
|
147
146
|
// 대상이 윤달이면, 앞에 있는 평달을 누적
|
|
148
|
-
var leapMonth = getLeapMonth(year);
|
|
149
147
|
if (isLeapMonth && leapMonth === month) {
|
|
150
148
|
days += getMonthDays$1(year, month);
|
|
151
149
|
}
|
|
@@ -233,7 +231,7 @@ var isValidDate$1 = function (year, month, day, isLeapMonth) {
|
|
|
233
231
|
* @param year 1890년 ~ 2050년
|
|
234
232
|
* @param month 1월 ~ 12월
|
|
235
233
|
* @param isLeapMonth 대상이 윤달이면 true
|
|
236
|
-
* @returns 윤달이 있는 해는 0~12 (13개월), 없는 해는 0~11 (12개월)
|
|
234
|
+
* @returns 윤달이 있는 해는 0 ~ 12 (13개월), 없는 해는 0 ~ 11 (12개월)
|
|
237
235
|
*/
|
|
238
236
|
var getMonthIndex = function (year, month, isLeapMonth) {
|
|
239
237
|
month = toInt(month);
|
|
@@ -249,7 +247,7 @@ var getMonthIndex = function (year, month, isLeapMonth) {
|
|
|
249
247
|
/**
|
|
250
248
|
* 0-based 연속적인 월 인덱스에 해당하는 월과 윤달 여부를 반환합니다.
|
|
251
249
|
* @param year 1890년 ~ 2050년
|
|
252
|
-
* @param monthIndex 윤달이 있는 해는 0~12 (13개월), 없는 해는 0~11 (12개월)
|
|
250
|
+
* @param monthIndex 윤달이 있는 해는 0 ~ 12 (13개월), 없는 해는 0 ~ 11 (12개월)
|
|
253
251
|
* @returns month (1~12)와 isLeapMonth 여부
|
|
254
252
|
*/
|
|
255
253
|
var getMonthFromIndex = function (year, monthIndex) {
|
|
@@ -268,32 +266,32 @@ var getMonthFromIndex = function (year, monthIndex) {
|
|
|
268
266
|
};
|
|
269
267
|
|
|
270
268
|
var LunarTable = /*#__PURE__*/Object.freeze({
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
269
|
+
__proto__: null,
|
|
270
|
+
BASE_DAY: BASE_DAY$1,
|
|
271
|
+
BASE_MONTH: BASE_MONTH$1,
|
|
272
|
+
BASE_VALUE: BASE_VALUE$1,
|
|
273
|
+
BASE_YEAR: BASE_YEAR$1,
|
|
274
|
+
MAX_DAY: MAX_DAY$1,
|
|
275
|
+
MAX_MONTH: MAX_MONTH$1,
|
|
276
|
+
MAX_VALUE: MAX_VALUE$1,
|
|
277
|
+
MAX_YEAR: MAX_YEAR$1,
|
|
278
|
+
getIljin: getIljin,
|
|
279
|
+
getIljinByJulianDay: getIljinByJulianDay,
|
|
280
|
+
getLeapMonth: getLeapMonth,
|
|
281
|
+
getLeapMonthDays: getLeapMonthDays,
|
|
282
|
+
getMonthDays: getMonthDays$1,
|
|
283
|
+
getMonthFromIndex: getMonthFromIndex,
|
|
284
|
+
getMonthIndex: getMonthIndex,
|
|
285
|
+
getSecha: getSecha,
|
|
286
|
+
getTotalDays: getTotalDays$1,
|
|
287
|
+
getTotalDaysBeforeMonth: getTotalDaysBeforeMonth$1,
|
|
288
|
+
getTotalDaysBeforeYear: getTotalDaysBeforeYear$1,
|
|
289
|
+
getWolgeon: getWolgeon,
|
|
290
|
+
getYearDays: getYearDays$1,
|
|
291
|
+
hasLeapMonth: hasLeapMonth,
|
|
292
|
+
isDateInRange: isDateInRange$1,
|
|
293
|
+
isLeapMonth: isLeapMonth,
|
|
294
|
+
isValidDate: isValidDate$1
|
|
297
295
|
});
|
|
298
296
|
|
|
299
297
|
var MONTH_DAYS = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];
|
|
@@ -308,7 +306,7 @@ var MAX_YEAR = 2050;
|
|
|
308
306
|
var MAX_MONTH = 12;
|
|
309
307
|
var MAX_DAY = 31;
|
|
310
308
|
var MAX_VALUE = MAX_YEAR * 10000 + MAX_MONTH * 100 + MAX_DAY;
|
|
311
|
-
var totalDaysBeforeYear =
|
|
309
|
+
var totalDaysBeforeYear = [];
|
|
312
310
|
var isLeapYear = function (year) {
|
|
313
311
|
year = toInt(year);
|
|
314
312
|
return (year % 4 === 0 && year % 100 !== 0) || year % 400 === 0;
|
|
@@ -326,14 +324,14 @@ var getYearDays = function (year) {
|
|
|
326
324
|
* 연도별 누적 일 수를 초기에 룩업 테이블로 생성하여
|
|
327
325
|
* O(1)으로 누적 일 수를 가져오게 변환함
|
|
328
326
|
*/
|
|
329
|
-
totalDaysBeforeYear[
|
|
327
|
+
totalDaysBeforeYear[0] = 0;
|
|
330
328
|
for (var y = BASE_YEAR + 1; y <= MAX_YEAR; y++) {
|
|
331
|
-
|
|
329
|
+
var idx = y - BASE_YEAR;
|
|
330
|
+
totalDaysBeforeYear[idx] = totalDaysBeforeYear[idx - 1] + getYearDays(y - 1);
|
|
332
331
|
}
|
|
333
332
|
var getTotalDaysBeforeYear = function (year) {
|
|
334
333
|
year = toInt(year);
|
|
335
|
-
|
|
336
|
-
return day;
|
|
334
|
+
return totalDaysBeforeYear[year - BASE_YEAR];
|
|
337
335
|
};
|
|
338
336
|
var getTotalDaysBeforeMonth = function (year, month) {
|
|
339
337
|
var day = 0;
|
|
@@ -389,23 +387,23 @@ var isValidDate = function (year, month, day) {
|
|
|
389
387
|
};
|
|
390
388
|
|
|
391
389
|
var SolarTable = /*#__PURE__*/Object.freeze({
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
|
|
390
|
+
__proto__: null,
|
|
391
|
+
BASE_DAY: BASE_DAY,
|
|
392
|
+
BASE_MONTH: BASE_MONTH,
|
|
393
|
+
BASE_VALUE: BASE_VALUE,
|
|
394
|
+
BASE_YEAR: BASE_YEAR,
|
|
395
|
+
MAX_DAY: MAX_DAY,
|
|
396
|
+
MAX_MONTH: MAX_MONTH,
|
|
397
|
+
MAX_VALUE: MAX_VALUE,
|
|
398
|
+
MAX_YEAR: MAX_YEAR,
|
|
399
|
+
getMonthDays: getMonthDays,
|
|
400
|
+
getTotalDays: getTotalDays,
|
|
401
|
+
getTotalDaysBeforeMonth: getTotalDaysBeforeMonth,
|
|
402
|
+
getTotalDaysBeforeYear: getTotalDaysBeforeYear,
|
|
403
|
+
getYearDays: getYearDays,
|
|
404
|
+
isDateInRange: isDateInRange,
|
|
405
|
+
isLeapYear: isLeapYear,
|
|
406
|
+
isValidDate: isValidDate
|
|
409
407
|
});
|
|
410
408
|
|
|
411
409
|
var SOLAR_LUNAR_DAY_DIFF = 20;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"kor-lunar.esm.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|
|
1
|
+
{"version":3,"file":"kor-lunar.esm.js","sources":["../src/utils.ts","../src/lunar-table.ts","../src/solar-table.ts","../src/kor-lunar.ts","../src/index.ts"],"sourcesContent":["export const toInt = (num: string | number): number => {\n return ~~num;\n};\n","import { toInt } from \"./utils\";\n\n/**\n * 음력 테이블\n *\n * 9b (17-25): 해당 해의 총 음력 일 수 (예: 384)\n *\n * 1b ( 16): 윤달의 크기 (0: 29일, 1: 30일)\n *\n * 4b (12-15): 윤달 위치 (1-12, 윤달이 없으면 0)\n *\n * 12b ( 0-11): 각 월의 크기 (0: 29일, 1: 30일)\n */\nconst LUN_TABLE = [\n /* 0 1 2 3 4 5 6 7 8 9 */\n /*1890*/ 0x3002ab6, 0x2c60daa, 0x3006ee4, 0x2c40ea4, 0x2c40d4a, 0x2fe5555, 0x2c60a97, 0x2c40556, 0x300355d, 0x2c60ad5,\n /*1900*/ 0x3008bd2, 0x2c40752, 0x2c60ea5, 0x2fe5b2a, 0x2c4064b, 0x2c60a9b, 0x3014aa6, 0x2c4056a, 0x2c60b59, 0x3002baa,\n /*1910*/ 0x2c40752, 0x3006da5, 0x2c40b25, 0x2c40a4b, 0x300595b, 0x2c60aad, 0x2c4056a, 0x30025b5, 0x2c60ba9, 0x3007dd2,\n /*1920*/ 0x2c40d92, 0x2c40d25, 0x3005d2d, 0x2c40956, 0x2c402b5, 0x3024add, 0x2c406d4, 0x2c60da9, 0x3002eca, 0x2c40e92,\n /*1930*/ 0x2fe66a6, 0x2c40527, 0x2c60a57, 0x3015956, 0x2c60ada, 0x2c406d4, 0x3013751, 0x2c40749, 0x3017b13, 0x2c40a93,\n /*1940*/ 0x2c4052b, 0x301651b, 0x2c6096d, 0x2c60b6a, 0x3014da4, 0x2c40ba4, 0x2c40b49, 0x3002d4b, 0x2c40a95, 0x3007aab,\n /*1950*/ 0x2c4052d, 0x2c60aad, 0x3015aaa, 0x2c60db2, 0x2c40da4, 0x3013ea1, 0x2c40d4a, 0x3008d95, 0x2c40a96, 0x2c40556,\n /*1960*/ 0x3006575, 0x2c60ad5, 0x2c406d2, 0x3004755, 0x2c60ea5, 0x2c40e4a, 0x2fe364e, 0x2c60a9b, 0x3007ad6, 0x2c4056a,\n /*1970*/ 0x2c60b59, 0x3005bb2, 0x2c40752, 0x2c40725, 0x3004b2b, 0x2c40a4b, 0x30089ab, 0x2c402ad, 0x2c6056b, 0x30165a9,\n /*1980*/ 0x2c60da9, 0x2c40d92, 0x3004d95, 0x2c40d25, 0x300ae4d, 0x2c40a56, 0x2c402b6, 0x3026aed, 0x2c406d4, 0x2c60da9,\n /*1990*/ 0x3005ed2, 0x2c40e92, 0x2c40d26, 0x2fe352e, 0x2c60a57, 0x30089b6, 0x2c60b5a, 0x2c406d4, 0x3005769, 0x2c40749,\n /*2000*/ 0x2c40693, 0x3004a97, 0x2c4052b, 0x2c60a5b, 0x3002aae, 0x2c4036a, 0x3027dd5, 0x2c40ba4, 0x2c40b49, 0x3005d53,\n /*2010*/ 0x2c40a95, 0x2c4052d, 0x301352d, 0x2c60aad, 0x3009baa, 0x2c405d2, 0x2c60da5, 0x3005eaa, 0x2c40d4a, 0x2c40a95,\n /*2020*/ 0x3004a9d, 0x2c40556, 0x2c60ab5, 0x3002ad6, 0x2c406d2, 0x3006765, 0x2c60ea5, 0x2c40e4a, 0x2fe5656, 0x2c60c9b,\n /*2030*/ 0x2c4055a, 0x300356d, 0x2c60b69, 0x300bf52, 0x2c40752, 0x2c40b25, 0x3016b0b, 0x2c40a4b, 0x2c404ab, 0x30052bb,\n /*2040*/ 0x2c6056d, 0x2c60b69, 0x3002daa, 0x2c40d92, 0x3007ea5, 0x2c40d25, 0x2c40a4d, 0x3015a4d, 0x2c402b6, 0x2c605b5,\n /*2050*/ 0x00136d1 /* 11월 18일 까지라 데이터 부족 */,\n];\n\nconst gan = [\"갑\", \"을\", \"병\", \"정\", \"무\", \"기\", \"경\", \"신\", \"임\", \"계\"];\nconst ji = [\"자\", \"축\", \"인\", \"묘\", \"진\", \"사\", \"오\", \"미\", \"신\", \"유\", \"술\", \"해\"];\n\nexport const BASE_YEAR = 1890;\nexport const BASE_MONTH = 1;\nexport const BASE_DAY = 1;\nexport const BASE_VALUE = BASE_YEAR * 10000 + BASE_MONTH * 100 + BASE_DAY;\n\nexport const MAX_YEAR = 2050;\nexport const MAX_MONTH = 11;\nexport const MAX_DAY = 18;\nexport const MAX_VALUE = MAX_YEAR * 10000 + MAX_MONTH * 100 + MAX_DAY;\n\nconst SMALL_MONTH_DAY = 29;\nconst BIG_MONTH_DAY = 30;\n\nconst totalDaysBeforeYear: number[] = [];\n\nconst getYearData = (year: number): number => {\n year = toInt(year);\n return LUN_TABLE[year - BASE_YEAR];\n};\n\n/**\n * 해당 월 (평달)의 일 수를 반환합니다.\n * @param year 1890년 ~ 2050년\n * @param month 1월 ~ 12월\n * @returns 월의 일 수 (29 또는 30)\n */\nexport const getMonthDays = (year: number, month: number): number => {\n month = toInt(month);\n const monthType = (getYearData(year) >> (month - 1)) & 0x1;\n return monthType === 0 ? SMALL_MONTH_DAY : BIG_MONTH_DAY;\n};\n\n/**\n * 해당 연도의 윤달을 반환합니다.\n * @param year 1890년 ~ 2050년\n * @returns 윤달 월 (1월 ~ 12월), 없으면 0\n */\nexport const getLeapMonth = (year: number): number => {\n return (getYearData(year) >> 12) & 0xf;\n};\n\n/**\n * 해당 연도에 윤달이 있는지를 반환합니다.\n * @param year 1890년 ~ 2050년\n * @return 윤달이 있으면 true\n */\nexport const hasLeapMonth = (year: number): boolean => {\n return getLeapMonth(year) !== 0;\n};\n\n/**\n * 해당 월이 윤달인지를 반환합니다.\n * @param year 1890년 ~ 2050년\n * @param month 1월 ~ 12월\n * @returns 윤달이면 true\n */\nexport const isLeapMonth = (year: number, month: number): boolean => {\n month = toInt(month);\n return month === getLeapMonth(year);\n};\n\n/**\n * 해당 월 (윤달)의 일 수를 반환합니다.\n * @param year 1890년 ~ 2050년\n * @param month 1월 ~ 12월\n * @returns 윤달의 일 수 (29 또는 30), 윤달이 아니면 0\n */\nexport const getLeapMonthDays = (year: number, month: number): number => {\n if (!isLeapMonth(year, month)) return 0;\n const monthType = (getYearData(year) >> 16) & 0x1;\n return monthType === 0 ? SMALL_MONTH_DAY : BIG_MONTH_DAY;\n};\n\n/**\n * 해당 연도의 총 일 수를 반환합니다.\n * @param year 1890년 ~ 2050년\n * @return 해당 연도의 총 일 수\n */\nexport const getYearDays = (year: number): number => {\n return (getYearData(year) >> 17) & 0x1ff;\n};\n\n/**\n * 연도별 누적 일 수를 초기에 룩업 테이블로 생성하여\n * O(1)으로 누적 일 수를 가져오게 변환함\n */\ntotalDaysBeforeYear[0] = 0;\nfor (let y = BASE_YEAR + 1; y <= MAX_YEAR; y++) {\n const idx = y - BASE_YEAR;\n totalDaysBeforeYear[idx] = totalDaysBeforeYear[idx - 1] + getYearDays(y - 1);\n}\n\n/**\n * 1890년부터 해당 연도 전까지의 누적 일 수를 반환합니다.\n * @param year 1890년 ~ 2050년\n * @return 해당 연도 전까지의 누적 일 수\n */\nexport const getTotalDaysBeforeYear = (year: number): number => {\n year = toInt(year);\n return totalDaysBeforeYear[year - BASE_YEAR];\n};\n\n/**\n * 해당 연도 내에서 해당 월 (및 윤달 포함) 전까지의 누적 일 수를 반환합니다.\n * @param year 1890년 ~ 2050년\n * @param month 1월 ~ 12월\n * @param isLeapMonth 대상이 윤달이면 true\n * @returns 해당 연도 내, 해당 월 전까지의 누적 일 수\n */\nexport const getTotalDaysBeforeMonth = (year: number, month: number, isLeapMonth: boolean): number => {\n month = toInt(month);\n const leapMonth = getLeapMonth(year);\n let days = 0;\n // 해당 월 전까지 윤달을 포함하여 누적\n for (let m = 1; m < month; m++) {\n days += getMonthDays(year, m);\n if (m === leapMonth) {\n days += getLeapMonthDays(year, m);\n }\n }\n // 대상이 윤달이면, 앞에 있는 평달을 누적\n if (isLeapMonth && leapMonth === month) {\n days += getMonthDays(year, month);\n }\n return days;\n};\n\n/**\n * 1890년부터 해당 연도, 월, 일 (및 윤달 포함) 까지의 누적 일 수를 반환합니다.\n * @param year 1890년 ~ 2050년\n * @param month 1월 ~ 12월\n * @param day 일자\n * @param isLeapMonth 대상이 윤달이면 true\n * @returns 총 누적 일 수\n */\nexport const getTotalDays = (year: number, month: number, day: number, isLeapMonth: boolean): number => {\n day = toInt(day);\n let days = getTotalDaysBeforeYear(year) + getTotalDaysBeforeMonth(year, month, isLeapMonth) + day;\n return days;\n};\n\nexport const getSecha = (year: number): string => {\n year = toInt(year);\n const g = gan[(year + 6) % gan.length];\n const j = ji[(year + 8) % ji.length];\n return g + j;\n};\n\nexport const getWolgeon = (year: number, month: number): string => {\n year = toInt(year);\n month = toInt(month);\n const g = gan[(year * 2 + month + 3) % gan.length];\n const j = ji[(month + 1) % ji.length];\n return g + j;\n};\n\nexport const getIljinByJulianDay = (julianDay: number): string => {\n julianDay = toInt(julianDay);\n const g = gan[(julianDay - 1) % gan.length];\n const j = ji[(julianDay + 1) % ji.length];\n return g + j;\n};\n\nexport const getIljin = (year: number, month: number, day: number, isLeapMonth: boolean): string => {\n const days = getTotalDays(year, month, day, isLeapMonth);\n return getIljinByJulianDay(days - 1);\n};\n\n/**\n * 날짜가 지원하는 범위 내에 있는지를 반환합니다.\n * 날짜의 유효성 (존재 여부)은 검사하지 않습니다.\n * @returns 날짜가 범위 내에 있으면 true\n */\nexport const isDateInRange = (year: number, month: number, day: number): boolean => {\n year = toInt(year);\n month = toInt(month);\n day = toInt(day);\n const value = year * 10000 + month * 100 + day;\n return value >= BASE_VALUE && value <= MAX_VALUE;\n};\n\n/**\n * 실제로 존재하는 유효한 날짜인지를 반환합니다.\n * @returns 유효한 날짜이면 true\n */\nexport const isValidDate = (year: number, month: number, day: number, isLeapMonth: boolean): boolean => {\n year = toInt(year);\n month = toInt(month);\n day = toInt(day);\n if (year < BASE_YEAR || year > MAX_YEAR) return false;\n\n if (year === BASE_YEAR) {\n if (month < BASE_MONTH) return false;\n if (month === BASE_MONTH && day < BASE_DAY) return false;\n }\n\n if (year === MAX_YEAR) {\n if (month > MAX_MONTH) return false;\n if (month === MAX_MONTH && day > MAX_DAY) return false;\n }\n\n if (month < 1 || month > 12) return false;\n if (day < 1) return false;\n\n const endDay = isLeapMonth ? getLeapMonthDays(year, month) : getMonthDays(year, month);\n return day <= endDay;\n};\n\n/**\n * 해당 월의 0-based 연속적인 월 인덱스를 반환합니다.\n * @param year 1890년 ~ 2050년\n * @param month 1월 ~ 12월\n * @param isLeapMonth 대상이 윤달이면 true\n * @returns 윤달이 있는 해는 0 ~ 12 (13개월), 없는 해는 0 ~ 11 (12개월)\n */\nexport const getMonthIndex = (year: number, month: number, isLeapMonth: boolean): number => {\n month = toInt(month);\n let index = month;\n if (hasLeapMonth(year)) {\n const leapMonth = getLeapMonth(year);\n if ((isLeapMonth && month === leapMonth) || month > leapMonth) {\n index++;\n }\n }\n return index - 1;\n};\n\n/**\n * 0-based 연속적인 월 인덱스에 해당하는 월과 윤달 여부를 반환합니다.\n * @param year 1890년 ~ 2050년\n * @param monthIndex 윤달이 있는 해는 0 ~ 12 (13개월), 없는 해는 0 ~ 11 (12개월)\n * @returns month (1~12)와 isLeapMonth 여부\n */\nexport const getMonthFromIndex = (year: number, monthIndex: number): { month: number; isLeapMonth: boolean } => {\n const leapMonth = getLeapMonth(year);\n let isLeapMonth = false;\n let index = monthIndex;\n if (leapMonth > 0) {\n if (index === leapMonth) {\n isLeapMonth = true;\n }\n if (index >= leapMonth) {\n index--;\n }\n }\n return { month: index + 1, isLeapMonth };\n};\n","import { toInt } from \"./utils\";\n\nconst MONTH_DAYS = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];\n\nconst LEAP_FEBRUARY_DAY = 29;\n\nconst YEAR_DAY = 365;\nconst LEAP_YEAR_DAY = 366;\n\nexport const BASE_YEAR = 1890;\nexport const BASE_MONTH = 1;\nexport const BASE_DAY = 21;\nexport const BASE_VALUE = BASE_YEAR * 10000 + BASE_MONTH * 100 + BASE_DAY;\n\nexport const MAX_YEAR = 2050;\nexport const MAX_MONTH = 12;\nexport const MAX_DAY = 31;\nexport const MAX_VALUE = MAX_YEAR * 10000 + MAX_MONTH * 100 + MAX_DAY;\n\nconst totalDaysBeforeYear: number[] = [];\n\nexport const isLeapYear = (year: number): boolean => {\n year = toInt(year);\n return (year % 4 === 0 && year % 100 !== 0) || year % 400 === 0;\n};\n\nexport const getMonthDays = (year: number, month: number): number => {\n month = toInt(month);\n let day = month === 2 && isLeapYear(year) ? LEAP_FEBRUARY_DAY : MONTH_DAYS[month - 1];\n return day;\n};\n\nexport const getYearDays = (year: number): number => {\n let day = isLeapYear(year) ? LEAP_YEAR_DAY : YEAR_DAY;\n return day;\n};\n\n/**\n * 연도별 누적 일 수를 초기에 룩업 테이블로 생성하여\n * O(1)으로 누적 일 수를 가져오게 변환함\n */\ntotalDaysBeforeYear[0] = 0;\nfor (let y = BASE_YEAR + 1; y <= MAX_YEAR; y++) {\n const idx = y - BASE_YEAR;\n totalDaysBeforeYear[idx] = totalDaysBeforeYear[idx - 1] + getYearDays(y - 1);\n}\n\nexport const getTotalDaysBeforeYear = (year: number): number => {\n year = toInt(year);\n return totalDaysBeforeYear[year - BASE_YEAR];\n};\n\nexport const getTotalDaysBeforeMonth = (year: number, month: number): number => {\n let day = 0;\n for (let m = 1; m < month; m++) {\n day += getMonthDays(year, m);\n }\n return day;\n};\n\nexport const getTotalDays = (year: number, month: number, day: number): number => {\n let days = getTotalDaysBeforeYear(year) + getTotalDaysBeforeMonth(year, month) + day;\n return days;\n};\n\n/**\n * 날짜가 지원하는 범위 내에 있는지를 반환합니다.\n * 날짜의 유효성 (존재 여부)은 검사하지 않습니다.\n * @returns 날짜가 범위 내에 있으면 true\n */\nexport const isDateInRange = (year: number, month: number, day: number): boolean => {\n year = toInt(year);\n month = toInt(month);\n day = toInt(day);\n const value = year * 10000 + month * 100 + day;\n return value >= BASE_VALUE && value <= MAX_VALUE;\n};\n\n/**\n * 실제로 존재하는 유효한 날짜인지를 반환합니다.\n * @returns 유효한 날짜이면 true\n */\nexport const isValidDate = (year: number, month: number, day: number): boolean => {\n year = toInt(year);\n month = toInt(month);\n day = toInt(day);\n if (year < BASE_YEAR || year > MAX_YEAR) return false;\n\n if (year === BASE_YEAR) {\n if (month < BASE_MONTH) return false;\n if (month === BASE_MONTH && day < BASE_DAY) return false;\n }\n\n if (year === MAX_YEAR) {\n if (month > MAX_MONTH) return false;\n if (month === MAX_MONTH && day > MAX_DAY) return false;\n }\n\n if (month < 1 || month > 12) return false;\n if (day < 1) return false;\n\n const endDay = getMonthDays(year, month);\n return day <= endDay;\n};\n","import * as LunarTable from \"./lunar-table\";\nimport * as SolarTable from \"./solar-table\";\nimport { toInt } from \"./utils\";\n\nconst SOLAR_LUNAR_DAY_DIFF = 20;\nconst JULIAN_DAY_DIFF = 2411389;\n\nexport interface LunarDate {\n year: number;\n month: number;\n day: number;\n isLeapMonth: boolean;\n secha: string;\n wolgeon: string;\n iljin: string;\n julianDay: number;\n dayOfWeek: number;\n}\n\nexport interface SolarDate {\n year: number;\n month: number;\n day: number;\n}\n\n/**\n * 양력을 음력으로 변환합니다.\n * 양력 지원 날짜 범위: 1890년 1월 21일 ~ 2050년 12월 31일\n * @param solYear 양력 연도\n * @param solMonth 양력 월\n * @param solDay 양력 일\n * @returns 음력 날짜\n */\nexport const toLunar = (solYear: number, solMonth: number, solDay: number): LunarDate => {\n solYear = toInt(solYear);\n solMonth = toInt(solMonth);\n solDay = toInt(solDay);\n\n if (!SolarTable.isDateInRange(solYear, solMonth, solDay)) {\n throw new RangeError(`지원되지 않는 날짜입니다. 입력한 날짜: ${solYear}-${solMonth}-${solDay}`);\n }\n\n let year = Math.min(solYear, LunarTable.MAX_YEAR);\n let month = solYear > LunarTable.MAX_YEAR ? LunarTable.MAX_MONTH : solMonth;\n let day = 1;\n\n const lunTotalDays = LunarTable.getTotalDays(year, month, day, true);\n const solTotalDays = SolarTable.getTotalDays(solYear, solMonth, solDay);\n\n const diffDays = solTotalDays - SOLAR_LUNAR_DAY_DIFF - lunTotalDays;\n day += diffDays;\n\n let day2 = solTotalDays - SOLAR_LUNAR_DAY_DIFF;\n\n let julianDay = JULIAN_DAY_DIFF + day2 - 1;\n let dayOfWeek = (day2 + 1) % 7;\n\n let isLeapMonth = month === LunarTable.getLeapMonth(year);\n let monthDays;\n\n while (day < 1) {\n if (isLeapMonth) {\n isLeapMonth = false;\n } else {\n month--;\n\n if (month === 0) {\n month = 12;\n year--;\n }\n\n isLeapMonth = month === LunarTable.getLeapMonth(year);\n }\n\n monthDays = isLeapMonth ? LunarTable.getLeapMonthDays(year, month) : LunarTable.getMonthDays(year, month);\n day += monthDays;\n }\n\n return {\n year,\n month,\n day,\n isLeapMonth,\n secha: LunarTable.getSecha(year),\n wolgeon: isLeapMonth ? \"\" : LunarTable.getWolgeon(year, month),\n iljin: LunarTable.getIljinByJulianDay(julianDay),\n julianDay,\n dayOfWeek,\n };\n};\n\n/**\n * 음력을 양력으로 변환합니다.\n * 음력 지원 날짜 범위: 1890년 1월 1일 ~ 2050년 11월 18일\n * @param lunYear 음력 연도\n * @param lunMonth 음력 월\n * @param lunDay 음력 일\n * @param isLeapMonth 음력 윤달 여부, 윤달이면 true\n * @returns 양력 날짜\n */\nexport const toSolar = (lunYear: number, lunMonth: number, lunDay: number, isLeapMonth: boolean): SolarDate => {\n lunYear = toInt(lunYear);\n lunMonth = toInt(lunMonth);\n lunDay = toInt(lunDay);\n\n if (!LunarTable.isDateInRange(lunYear, lunMonth, lunDay)) {\n throw new RangeError(`지원되지 않는 날짜입니다. 입력한 날짜: ${lunYear}-${lunMonth}-${lunDay}`);\n }\n\n const lunTotalDays = LunarTable.getTotalDays(lunYear, lunMonth, lunDay, isLeapMonth);\n const solTotalDays = SolarTable.getTotalDays(lunYear, lunMonth, lunDay);\n\n const diffDays = lunTotalDays - (solTotalDays - SOLAR_LUNAR_DAY_DIFF);\n\n let year = lunYear;\n let month = lunMonth;\n let day = lunDay + diffDays;\n\n let monthDays = SolarTable.getMonthDays(year, month);\n\n while (day > monthDays) {\n day -= monthDays;\n month++;\n\n if (month > 12) {\n month = 1;\n year++;\n }\n\n monthDays = SolarTable.getMonthDays(year, month);\n }\n\n return { year, month, day };\n};\n\nexport { LunarTable, SolarTable };\n\n/** @deprecated `LunarData`는 `LunarTable`로 이름이 변경되었습니다. */\nexport const LunarData = LunarTable;\n/** @deprecated `SolarData`는 `SolarTable`로 이름이 변경되었습니다. */\nexport const SolarData = SolarTable;\n","import { toLunar, toSolar, LunarTable, SolarTable, LunarData, SolarData, LunarDate, SolarDate } from \"./kor-lunar\";\n\nconst korLunar = { toLunar, toSolar, LunarTable, SolarTable, LunarData, SolarData };\nexport default korLunar;\nexport { toLunar, toSolar, LunarTable, SolarTable, LunarData, SolarData, LunarDate, SolarDate };\n"],"names":["BASE_YEAR","BASE_MONTH","BASE_DAY","BASE_VALUE","MAX_YEAR","MAX_MONTH","MAX_DAY","MAX_VALUE","totalDaysBeforeYear","getMonthDays","getYearDays","y","idx","getTotalDaysBeforeYear","getTotalDaysBeforeMonth","getTotalDays","isDateInRange","isValidDate","SolarTable.isDateInRange","LunarTable.MAX_YEAR","LunarTable.MAX_MONTH","LunarTable.getTotalDays","SolarTable.getTotalDays","LunarTable.getLeapMonth","LunarTable.getLeapMonthDays","LunarTable.getMonthDays","LunarTable.getSecha","LunarTable.getWolgeon","LunarTable.getIljinByJulianDay","LunarTable.isDateInRange","SolarTable.getMonthDays"],"mappings":"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"}
|
package/dist/kor-lunar.js
CHANGED
|
@@ -3,9 +3,7 @@
|
|
|
3
3
|
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
4
|
|
|
5
5
|
var toInt = function (num) {
|
|
6
|
-
|
|
7
|
-
return ~~num;
|
|
8
|
-
return num;
|
|
6
|
+
return ~~num;
|
|
9
7
|
};
|
|
10
8
|
|
|
11
9
|
/**
|
|
@@ -51,7 +49,7 @@ var MAX_DAY$1 = 18;
|
|
|
51
49
|
var MAX_VALUE$1 = MAX_YEAR$1 * 10000 + MAX_MONTH$1 * 100 + MAX_DAY$1;
|
|
52
50
|
var SMALL_MONTH_DAY = 29;
|
|
53
51
|
var BIG_MONTH_DAY = 30;
|
|
54
|
-
var totalDaysBeforeYear$1 =
|
|
52
|
+
var totalDaysBeforeYear$1 = [];
|
|
55
53
|
var getYearData = function (year) {
|
|
56
54
|
year = toInt(year);
|
|
57
55
|
return LUN_TABLE[year - BASE_YEAR$1];
|
|
@@ -117,9 +115,10 @@ var getYearDays$1 = function (year) {
|
|
|
117
115
|
* 연도별 누적 일 수를 초기에 룩업 테이블로 생성하여
|
|
118
116
|
* O(1)으로 누적 일 수를 가져오게 변환함
|
|
119
117
|
*/
|
|
120
|
-
totalDaysBeforeYear$1[
|
|
118
|
+
totalDaysBeforeYear$1[0] = 0;
|
|
121
119
|
for (var y$1 = BASE_YEAR$1 + 1; y$1 <= MAX_YEAR$1; y$1++) {
|
|
122
|
-
|
|
120
|
+
var idx$1 = y$1 - BASE_YEAR$1;
|
|
121
|
+
totalDaysBeforeYear$1[idx$1] = totalDaysBeforeYear$1[idx$1 - 1] + getYearDays$1(y$1 - 1);
|
|
123
122
|
}
|
|
124
123
|
/**
|
|
125
124
|
* 1890년부터 해당 연도 전까지의 누적 일 수를 반환합니다.
|
|
@@ -128,8 +127,7 @@ for (var y$1 = BASE_YEAR$1 + 1; y$1 <= MAX_YEAR$1; y$1++) {
|
|
|
128
127
|
*/
|
|
129
128
|
var getTotalDaysBeforeYear$1 = function (year) {
|
|
130
129
|
year = toInt(year);
|
|
131
|
-
|
|
132
|
-
return days;
|
|
130
|
+
return totalDaysBeforeYear$1[year - BASE_YEAR$1];
|
|
133
131
|
};
|
|
134
132
|
/**
|
|
135
133
|
* 해당 연도 내에서 해당 월 (및 윤달 포함) 전까지의 누적 일 수를 반환합니다.
|
|
@@ -140,16 +138,16 @@ var getTotalDaysBeforeYear$1 = function (year) {
|
|
|
140
138
|
*/
|
|
141
139
|
var getTotalDaysBeforeMonth$1 = function (year, month, isLeapMonth) {
|
|
142
140
|
month = toInt(month);
|
|
141
|
+
var leapMonth = getLeapMonth(year);
|
|
143
142
|
var days = 0;
|
|
144
143
|
// 해당 월 전까지 윤달을 포함하여 누적
|
|
145
144
|
for (var m = 1; m < month; m++) {
|
|
146
145
|
days += getMonthDays$1(year, m);
|
|
147
|
-
if (m ===
|
|
146
|
+
if (m === leapMonth) {
|
|
148
147
|
days += getLeapMonthDays(year, m);
|
|
149
148
|
}
|
|
150
149
|
}
|
|
151
150
|
// 대상이 윤달이면, 앞에 있는 평달을 누적
|
|
152
|
-
var leapMonth = getLeapMonth(year);
|
|
153
151
|
if (isLeapMonth && leapMonth === month) {
|
|
154
152
|
days += getMonthDays$1(year, month);
|
|
155
153
|
}
|
|
@@ -237,7 +235,7 @@ var isValidDate$1 = function (year, month, day, isLeapMonth) {
|
|
|
237
235
|
* @param year 1890년 ~ 2050년
|
|
238
236
|
* @param month 1월 ~ 12월
|
|
239
237
|
* @param isLeapMonth 대상이 윤달이면 true
|
|
240
|
-
* @returns 윤달이 있는 해는 0~12 (13개월), 없는 해는 0~11 (12개월)
|
|
238
|
+
* @returns 윤달이 있는 해는 0 ~ 12 (13개월), 없는 해는 0 ~ 11 (12개월)
|
|
241
239
|
*/
|
|
242
240
|
var getMonthIndex = function (year, month, isLeapMonth) {
|
|
243
241
|
month = toInt(month);
|
|
@@ -253,7 +251,7 @@ var getMonthIndex = function (year, month, isLeapMonth) {
|
|
|
253
251
|
/**
|
|
254
252
|
* 0-based 연속적인 월 인덱스에 해당하는 월과 윤달 여부를 반환합니다.
|
|
255
253
|
* @param year 1890년 ~ 2050년
|
|
256
|
-
* @param monthIndex 윤달이 있는 해는 0~12 (13개월), 없는 해는 0~11 (12개월)
|
|
254
|
+
* @param monthIndex 윤달이 있는 해는 0 ~ 12 (13개월), 없는 해는 0 ~ 11 (12개월)
|
|
257
255
|
* @returns month (1~12)와 isLeapMonth 여부
|
|
258
256
|
*/
|
|
259
257
|
var getMonthFromIndex = function (year, monthIndex) {
|
|
@@ -272,32 +270,32 @@ var getMonthFromIndex = function (year, monthIndex) {
|
|
|
272
270
|
};
|
|
273
271
|
|
|
274
272
|
var LunarTable = /*#__PURE__*/Object.freeze({
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
273
|
+
__proto__: null,
|
|
274
|
+
BASE_DAY: BASE_DAY$1,
|
|
275
|
+
BASE_MONTH: BASE_MONTH$1,
|
|
276
|
+
BASE_VALUE: BASE_VALUE$1,
|
|
277
|
+
BASE_YEAR: BASE_YEAR$1,
|
|
278
|
+
MAX_DAY: MAX_DAY$1,
|
|
279
|
+
MAX_MONTH: MAX_MONTH$1,
|
|
280
|
+
MAX_VALUE: MAX_VALUE$1,
|
|
281
|
+
MAX_YEAR: MAX_YEAR$1,
|
|
282
|
+
getIljin: getIljin,
|
|
283
|
+
getIljinByJulianDay: getIljinByJulianDay,
|
|
284
|
+
getLeapMonth: getLeapMonth,
|
|
285
|
+
getLeapMonthDays: getLeapMonthDays,
|
|
286
|
+
getMonthDays: getMonthDays$1,
|
|
287
|
+
getMonthFromIndex: getMonthFromIndex,
|
|
288
|
+
getMonthIndex: getMonthIndex,
|
|
289
|
+
getSecha: getSecha,
|
|
290
|
+
getTotalDays: getTotalDays$1,
|
|
291
|
+
getTotalDaysBeforeMonth: getTotalDaysBeforeMonth$1,
|
|
292
|
+
getTotalDaysBeforeYear: getTotalDaysBeforeYear$1,
|
|
293
|
+
getWolgeon: getWolgeon,
|
|
294
|
+
getYearDays: getYearDays$1,
|
|
295
|
+
hasLeapMonth: hasLeapMonth,
|
|
296
|
+
isDateInRange: isDateInRange$1,
|
|
297
|
+
isLeapMonth: isLeapMonth,
|
|
298
|
+
isValidDate: isValidDate$1
|
|
301
299
|
});
|
|
302
300
|
|
|
303
301
|
var MONTH_DAYS = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];
|
|
@@ -312,7 +310,7 @@ var MAX_YEAR = 2050;
|
|
|
312
310
|
var MAX_MONTH = 12;
|
|
313
311
|
var MAX_DAY = 31;
|
|
314
312
|
var MAX_VALUE = MAX_YEAR * 10000 + MAX_MONTH * 100 + MAX_DAY;
|
|
315
|
-
var totalDaysBeforeYear =
|
|
313
|
+
var totalDaysBeforeYear = [];
|
|
316
314
|
var isLeapYear = function (year) {
|
|
317
315
|
year = toInt(year);
|
|
318
316
|
return (year % 4 === 0 && year % 100 !== 0) || year % 400 === 0;
|
|
@@ -330,14 +328,14 @@ var getYearDays = function (year) {
|
|
|
330
328
|
* 연도별 누적 일 수를 초기에 룩업 테이블로 생성하여
|
|
331
329
|
* O(1)으로 누적 일 수를 가져오게 변환함
|
|
332
330
|
*/
|
|
333
|
-
totalDaysBeforeYear[
|
|
331
|
+
totalDaysBeforeYear[0] = 0;
|
|
334
332
|
for (var y = BASE_YEAR + 1; y <= MAX_YEAR; y++) {
|
|
335
|
-
|
|
333
|
+
var idx = y - BASE_YEAR;
|
|
334
|
+
totalDaysBeforeYear[idx] = totalDaysBeforeYear[idx - 1] + getYearDays(y - 1);
|
|
336
335
|
}
|
|
337
336
|
var getTotalDaysBeforeYear = function (year) {
|
|
338
337
|
year = toInt(year);
|
|
339
|
-
|
|
340
|
-
return day;
|
|
338
|
+
return totalDaysBeforeYear[year - BASE_YEAR];
|
|
341
339
|
};
|
|
342
340
|
var getTotalDaysBeforeMonth = function (year, month) {
|
|
343
341
|
var day = 0;
|
|
@@ -393,23 +391,23 @@ var isValidDate = function (year, month, day) {
|
|
|
393
391
|
};
|
|
394
392
|
|
|
395
393
|
var SolarTable = /*#__PURE__*/Object.freeze({
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
|
|
412
|
-
|
|
394
|
+
__proto__: null,
|
|
395
|
+
BASE_DAY: BASE_DAY,
|
|
396
|
+
BASE_MONTH: BASE_MONTH,
|
|
397
|
+
BASE_VALUE: BASE_VALUE,
|
|
398
|
+
BASE_YEAR: BASE_YEAR,
|
|
399
|
+
MAX_DAY: MAX_DAY,
|
|
400
|
+
MAX_MONTH: MAX_MONTH,
|
|
401
|
+
MAX_VALUE: MAX_VALUE,
|
|
402
|
+
MAX_YEAR: MAX_YEAR,
|
|
403
|
+
getMonthDays: getMonthDays,
|
|
404
|
+
getTotalDays: getTotalDays,
|
|
405
|
+
getTotalDaysBeforeMonth: getTotalDaysBeforeMonth,
|
|
406
|
+
getTotalDaysBeforeYear: getTotalDaysBeforeYear,
|
|
407
|
+
getYearDays: getYearDays,
|
|
408
|
+
isDateInRange: isDateInRange,
|
|
409
|
+
isLeapYear: isLeapYear,
|
|
410
|
+
isValidDate: isValidDate
|
|
413
411
|
});
|
|
414
412
|
|
|
415
413
|
var SOLAR_LUNAR_DAY_DIFF = 20;
|
|
@@ -513,7 +511,7 @@ exports.LunarData = LunarData;
|
|
|
513
511
|
exports.LunarTable = LunarTable;
|
|
514
512
|
exports.SolarData = SolarData;
|
|
515
513
|
exports.SolarTable = SolarTable;
|
|
516
|
-
exports
|
|
514
|
+
exports.default = korLunar;
|
|
517
515
|
exports.toLunar = toLunar;
|
|
518
516
|
exports.toSolar = toSolar;
|
|
519
517
|
//# sourceMappingURL=kor-lunar.js.map
|
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":["../src/utils.ts","../src/lunar-table.ts","../src/solar-table.ts","../src/kor-lunar.ts","../src/index.ts"],"sourcesContent":["export const toInt = (num: string | number): number => {\n return ~~num;\n};\n","import { toInt } from \"./utils\";\n\n/**\n * 음력 테이블\n *\n * 9b (17-25): 해당 해의 총 음력 일 수 (예: 384)\n *\n * 1b ( 16): 윤달의 크기 (0: 29일, 1: 30일)\n *\n * 4b (12-15): 윤달 위치 (1-12, 윤달이 없으면 0)\n *\n * 12b ( 0-11): 각 월의 크기 (0: 29일, 1: 30일)\n */\nconst LUN_TABLE = [\n /* 0 1 2 3 4 5 6 7 8 9 */\n /*1890*/ 0x3002ab6, 0x2c60daa, 0x3006ee4, 0x2c40ea4, 0x2c40d4a, 0x2fe5555, 0x2c60a97, 0x2c40556, 0x300355d, 0x2c60ad5,\n /*1900*/ 0x3008bd2, 0x2c40752, 0x2c60ea5, 0x2fe5b2a, 0x2c4064b, 0x2c60a9b, 0x3014aa6, 0x2c4056a, 0x2c60b59, 0x3002baa,\n /*1910*/ 0x2c40752, 0x3006da5, 0x2c40b25, 0x2c40a4b, 0x300595b, 0x2c60aad, 0x2c4056a, 0x30025b5, 0x2c60ba9, 0x3007dd2,\n /*1920*/ 0x2c40d92, 0x2c40d25, 0x3005d2d, 0x2c40956, 0x2c402b5, 0x3024add, 0x2c406d4, 0x2c60da9, 0x3002eca, 0x2c40e92,\n /*1930*/ 0x2fe66a6, 0x2c40527, 0x2c60a57, 0x3015956, 0x2c60ada, 0x2c406d4, 0x3013751, 0x2c40749, 0x3017b13, 0x2c40a93,\n /*1940*/ 0x2c4052b, 0x301651b, 0x2c6096d, 0x2c60b6a, 0x3014da4, 0x2c40ba4, 0x2c40b49, 0x3002d4b, 0x2c40a95, 0x3007aab,\n /*1950*/ 0x2c4052d, 0x2c60aad, 0x3015aaa, 0x2c60db2, 0x2c40da4, 0x3013ea1, 0x2c40d4a, 0x3008d95, 0x2c40a96, 0x2c40556,\n /*1960*/ 0x3006575, 0x2c60ad5, 0x2c406d2, 0x3004755, 0x2c60ea5, 0x2c40e4a, 0x2fe364e, 0x2c60a9b, 0x3007ad6, 0x2c4056a,\n /*1970*/ 0x2c60b59, 0x3005bb2, 0x2c40752, 0x2c40725, 0x3004b2b, 0x2c40a4b, 0x30089ab, 0x2c402ad, 0x2c6056b, 0x30165a9,\n /*1980*/ 0x2c60da9, 0x2c40d92, 0x3004d95, 0x2c40d25, 0x300ae4d, 0x2c40a56, 0x2c402b6, 0x3026aed, 0x2c406d4, 0x2c60da9,\n /*1990*/ 0x3005ed2, 0x2c40e92, 0x2c40d26, 0x2fe352e, 0x2c60a57, 0x30089b6, 0x2c60b5a, 0x2c406d4, 0x3005769, 0x2c40749,\n /*2000*/ 0x2c40693, 0x3004a97, 0x2c4052b, 0x2c60a5b, 0x3002aae, 0x2c4036a, 0x3027dd5, 0x2c40ba4, 0x2c40b49, 0x3005d53,\n /*2010*/ 0x2c40a95, 0x2c4052d, 0x301352d, 0x2c60aad, 0x3009baa, 0x2c405d2, 0x2c60da5, 0x3005eaa, 0x2c40d4a, 0x2c40a95,\n /*2020*/ 0x3004a9d, 0x2c40556, 0x2c60ab5, 0x3002ad6, 0x2c406d2, 0x3006765, 0x2c60ea5, 0x2c40e4a, 0x2fe5656, 0x2c60c9b,\n /*2030*/ 0x2c4055a, 0x300356d, 0x2c60b69, 0x300bf52, 0x2c40752, 0x2c40b25, 0x3016b0b, 0x2c40a4b, 0x2c404ab, 0x30052bb,\n /*2040*/ 0x2c6056d, 0x2c60b69, 0x3002daa, 0x2c40d92, 0x3007ea5, 0x2c40d25, 0x2c40a4d, 0x3015a4d, 0x2c402b6, 0x2c605b5,\n /*2050*/ 0x00136d1 /* 11월 18일 까지라 데이터 부족 */,\n];\n\nconst gan = [\"갑\", \"을\", \"병\", \"정\", \"무\", \"기\", \"경\", \"신\", \"임\", \"계\"];\nconst ji = [\"자\", \"축\", \"인\", \"묘\", \"진\", \"사\", \"오\", \"미\", \"신\", \"유\", \"술\", \"해\"];\n\nexport const BASE_YEAR = 1890;\nexport const BASE_MONTH = 1;\nexport const BASE_DAY = 1;\nexport const BASE_VALUE = BASE_YEAR * 10000 + BASE_MONTH * 100 + BASE_DAY;\n\nexport const MAX_YEAR = 2050;\nexport const MAX_MONTH = 11;\nexport const MAX_DAY = 18;\nexport const MAX_VALUE = MAX_YEAR * 10000 + MAX_MONTH * 100 + MAX_DAY;\n\nconst SMALL_MONTH_DAY = 29;\nconst BIG_MONTH_DAY = 30;\n\nconst totalDaysBeforeYear: number[] = [];\n\nconst getYearData = (year: number): number => {\n year = toInt(year);\n return LUN_TABLE[year - BASE_YEAR];\n};\n\n/**\n * 해당 월 (평달)의 일 수를 반환합니다.\n * @param year 1890년 ~ 2050년\n * @param month 1월 ~ 12월\n * @returns 월의 일 수 (29 또는 30)\n */\nexport const getMonthDays = (year: number, month: number): number => {\n month = toInt(month);\n const monthType = (getYearData(year) >> (month - 1)) & 0x1;\n return monthType === 0 ? SMALL_MONTH_DAY : BIG_MONTH_DAY;\n};\n\n/**\n * 해당 연도의 윤달을 반환합니다.\n * @param year 1890년 ~ 2050년\n * @returns 윤달 월 (1월 ~ 12월), 없으면 0\n */\nexport const getLeapMonth = (year: number): number => {\n return (getYearData(year) >> 12) & 0xf;\n};\n\n/**\n * 해당 연도에 윤달이 있는지를 반환합니다.\n * @param year 1890년 ~ 2050년\n * @return 윤달이 있으면 true\n */\nexport const hasLeapMonth = (year: number): boolean => {\n return getLeapMonth(year) !== 0;\n};\n\n/**\n * 해당 월이 윤달인지를 반환합니다.\n * @param year 1890년 ~ 2050년\n * @param month 1월 ~ 12월\n * @returns 윤달이면 true\n */\nexport const isLeapMonth = (year: number, month: number): boolean => {\n month = toInt(month);\n return month === getLeapMonth(year);\n};\n\n/**\n * 해당 월 (윤달)의 일 수를 반환합니다.\n * @param year 1890년 ~ 2050년\n * @param month 1월 ~ 12월\n * @returns 윤달의 일 수 (29 또는 30), 윤달이 아니면 0\n */\nexport const getLeapMonthDays = (year: number, month: number): number => {\n if (!isLeapMonth(year, month)) return 0;\n const monthType = (getYearData(year) >> 16) & 0x1;\n return monthType === 0 ? SMALL_MONTH_DAY : BIG_MONTH_DAY;\n};\n\n/**\n * 해당 연도의 총 일 수를 반환합니다.\n * @param year 1890년 ~ 2050년\n * @return 해당 연도의 총 일 수\n */\nexport const getYearDays = (year: number): number => {\n return (getYearData(year) >> 17) & 0x1ff;\n};\n\n/**\n * 연도별 누적 일 수를 초기에 룩업 테이블로 생성하여\n * O(1)으로 누적 일 수를 가져오게 변환함\n */\ntotalDaysBeforeYear[0] = 0;\nfor (let y = BASE_YEAR + 1; y <= MAX_YEAR; y++) {\n const idx = y - BASE_YEAR;\n totalDaysBeforeYear[idx] = totalDaysBeforeYear[idx - 1] + getYearDays(y - 1);\n}\n\n/**\n * 1890년부터 해당 연도 전까지의 누적 일 수를 반환합니다.\n * @param year 1890년 ~ 2050년\n * @return 해당 연도 전까지의 누적 일 수\n */\nexport const getTotalDaysBeforeYear = (year: number): number => {\n year = toInt(year);\n return totalDaysBeforeYear[year - BASE_YEAR];\n};\n\n/**\n * 해당 연도 내에서 해당 월 (및 윤달 포함) 전까지의 누적 일 수를 반환합니다.\n * @param year 1890년 ~ 2050년\n * @param month 1월 ~ 12월\n * @param isLeapMonth 대상이 윤달이면 true\n * @returns 해당 연도 내, 해당 월 전까지의 누적 일 수\n */\nexport const getTotalDaysBeforeMonth = (year: number, month: number, isLeapMonth: boolean): number => {\n month = toInt(month);\n const leapMonth = getLeapMonth(year);\n let days = 0;\n // 해당 월 전까지 윤달을 포함하여 누적\n for (let m = 1; m < month; m++) {\n days += getMonthDays(year, m);\n if (m === leapMonth) {\n days += getLeapMonthDays(year, m);\n }\n }\n // 대상이 윤달이면, 앞에 있는 평달을 누적\n if (isLeapMonth && leapMonth === month) {\n days += getMonthDays(year, month);\n }\n return days;\n};\n\n/**\n * 1890년부터 해당 연도, 월, 일 (및 윤달 포함) 까지의 누적 일 수를 반환합니다.\n * @param year 1890년 ~ 2050년\n * @param month 1월 ~ 12월\n * @param day 일자\n * @param isLeapMonth 대상이 윤달이면 true\n * @returns 총 누적 일 수\n */\nexport const getTotalDays = (year: number, month: number, day: number, isLeapMonth: boolean): number => {\n day = toInt(day);\n let days = getTotalDaysBeforeYear(year) + getTotalDaysBeforeMonth(year, month, isLeapMonth) + day;\n return days;\n};\n\nexport const getSecha = (year: number): string => {\n year = toInt(year);\n const g = gan[(year + 6) % gan.length];\n const j = ji[(year + 8) % ji.length];\n return g + j;\n};\n\nexport const getWolgeon = (year: number, month: number): string => {\n year = toInt(year);\n month = toInt(month);\n const g = gan[(year * 2 + month + 3) % gan.length];\n const j = ji[(month + 1) % ji.length];\n return g + j;\n};\n\nexport const getIljinByJulianDay = (julianDay: number): string => {\n julianDay = toInt(julianDay);\n const g = gan[(julianDay - 1) % gan.length];\n const j = ji[(julianDay + 1) % ji.length];\n return g + j;\n};\n\nexport const getIljin = (year: number, month: number, day: number, isLeapMonth: boolean): string => {\n const days = getTotalDays(year, month, day, isLeapMonth);\n return getIljinByJulianDay(days - 1);\n};\n\n/**\n * 날짜가 지원하는 범위 내에 있는지를 반환합니다.\n * 날짜의 유효성 (존재 여부)은 검사하지 않습니다.\n * @returns 날짜가 범위 내에 있으면 true\n */\nexport const isDateInRange = (year: number, month: number, day: number): boolean => {\n year = toInt(year);\n month = toInt(month);\n day = toInt(day);\n const value = year * 10000 + month * 100 + day;\n return value >= BASE_VALUE && value <= MAX_VALUE;\n};\n\n/**\n * 실제로 존재하는 유효한 날짜인지를 반환합니다.\n * @returns 유효한 날짜이면 true\n */\nexport const isValidDate = (year: number, month: number, day: number, isLeapMonth: boolean): boolean => {\n year = toInt(year);\n month = toInt(month);\n day = toInt(day);\n if (year < BASE_YEAR || year > MAX_YEAR) return false;\n\n if (year === BASE_YEAR) {\n if (month < BASE_MONTH) return false;\n if (month === BASE_MONTH && day < BASE_DAY) return false;\n }\n\n if (year === MAX_YEAR) {\n if (month > MAX_MONTH) return false;\n if (month === MAX_MONTH && day > MAX_DAY) return false;\n }\n\n if (month < 1 || month > 12) return false;\n if (day < 1) return false;\n\n const endDay = isLeapMonth ? getLeapMonthDays(year, month) : getMonthDays(year, month);\n return day <= endDay;\n};\n\n/**\n * 해당 월의 0-based 연속적인 월 인덱스를 반환합니다.\n * @param year 1890년 ~ 2050년\n * @param month 1월 ~ 12월\n * @param isLeapMonth 대상이 윤달이면 true\n * @returns 윤달이 있는 해는 0 ~ 12 (13개월), 없는 해는 0 ~ 11 (12개월)\n */\nexport const getMonthIndex = (year: number, month: number, isLeapMonth: boolean): number => {\n month = toInt(month);\n let index = month;\n if (hasLeapMonth(year)) {\n const leapMonth = getLeapMonth(year);\n if ((isLeapMonth && month === leapMonth) || month > leapMonth) {\n index++;\n }\n }\n return index - 1;\n};\n\n/**\n * 0-based 연속적인 월 인덱스에 해당하는 월과 윤달 여부를 반환합니다.\n * @param year 1890년 ~ 2050년\n * @param monthIndex 윤달이 있는 해는 0 ~ 12 (13개월), 없는 해는 0 ~ 11 (12개월)\n * @returns month (1~12)와 isLeapMonth 여부\n */\nexport const getMonthFromIndex = (year: number, monthIndex: number): { month: number; isLeapMonth: boolean } => {\n const leapMonth = getLeapMonth(year);\n let isLeapMonth = false;\n let index = monthIndex;\n if (leapMonth > 0) {\n if (index === leapMonth) {\n isLeapMonth = true;\n }\n if (index >= leapMonth) {\n index--;\n }\n }\n return { month: index + 1, isLeapMonth };\n};\n","import { toInt } from \"./utils\";\n\nconst MONTH_DAYS = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];\n\nconst LEAP_FEBRUARY_DAY = 29;\n\nconst YEAR_DAY = 365;\nconst LEAP_YEAR_DAY = 366;\n\nexport const BASE_YEAR = 1890;\nexport const BASE_MONTH = 1;\nexport const BASE_DAY = 21;\nexport const BASE_VALUE = BASE_YEAR * 10000 + BASE_MONTH * 100 + BASE_DAY;\n\nexport const MAX_YEAR = 2050;\nexport const MAX_MONTH = 12;\nexport const MAX_DAY = 31;\nexport const MAX_VALUE = MAX_YEAR * 10000 + MAX_MONTH * 100 + MAX_DAY;\n\nconst totalDaysBeforeYear: number[] = [];\n\nexport const isLeapYear = (year: number): boolean => {\n year = toInt(year);\n return (year % 4 === 0 && year % 100 !== 0) || year % 400 === 0;\n};\n\nexport const getMonthDays = (year: number, month: number): number => {\n month = toInt(month);\n let day = month === 2 && isLeapYear(year) ? LEAP_FEBRUARY_DAY : MONTH_DAYS[month - 1];\n return day;\n};\n\nexport const getYearDays = (year: number): number => {\n let day = isLeapYear(year) ? LEAP_YEAR_DAY : YEAR_DAY;\n return day;\n};\n\n/**\n * 연도별 누적 일 수를 초기에 룩업 테이블로 생성하여\n * O(1)으로 누적 일 수를 가져오게 변환함\n */\ntotalDaysBeforeYear[0] = 0;\nfor (let y = BASE_YEAR + 1; y <= MAX_YEAR; y++) {\n const idx = y - BASE_YEAR;\n totalDaysBeforeYear[idx] = totalDaysBeforeYear[idx - 1] + getYearDays(y - 1);\n}\n\nexport const getTotalDaysBeforeYear = (year: number): number => {\n year = toInt(year);\n return totalDaysBeforeYear[year - BASE_YEAR];\n};\n\nexport const getTotalDaysBeforeMonth = (year: number, month: number): number => {\n let day = 0;\n for (let m = 1; m < month; m++) {\n day += getMonthDays(year, m);\n }\n return day;\n};\n\nexport const getTotalDays = (year: number, month: number, day: number): number => {\n let days = getTotalDaysBeforeYear(year) + getTotalDaysBeforeMonth(year, month) + day;\n return days;\n};\n\n/**\n * 날짜가 지원하는 범위 내에 있는지를 반환합니다.\n * 날짜의 유효성 (존재 여부)은 검사하지 않습니다.\n * @returns 날짜가 범위 내에 있으면 true\n */\nexport const isDateInRange = (year: number, month: number, day: number): boolean => {\n year = toInt(year);\n month = toInt(month);\n day = toInt(day);\n const value = year * 10000 + month * 100 + day;\n return value >= BASE_VALUE && value <= MAX_VALUE;\n};\n\n/**\n * 실제로 존재하는 유효한 날짜인지를 반환합니다.\n * @returns 유효한 날짜이면 true\n */\nexport const isValidDate = (year: number, month: number, day: number): boolean => {\n year = toInt(year);\n month = toInt(month);\n day = toInt(day);\n if (year < BASE_YEAR || year > MAX_YEAR) return false;\n\n if (year === BASE_YEAR) {\n if (month < BASE_MONTH) return false;\n if (month === BASE_MONTH && day < BASE_DAY) return false;\n }\n\n if (year === MAX_YEAR) {\n if (month > MAX_MONTH) return false;\n if (month === MAX_MONTH && day > MAX_DAY) return false;\n }\n\n if (month < 1 || month > 12) return false;\n if (day < 1) return false;\n\n const endDay = getMonthDays(year, month);\n return day <= endDay;\n};\n","import * as LunarTable from \"./lunar-table\";\nimport * as SolarTable from \"./solar-table\";\nimport { toInt } from \"./utils\";\n\nconst SOLAR_LUNAR_DAY_DIFF = 20;\nconst JULIAN_DAY_DIFF = 2411389;\n\nexport interface LunarDate {\n year: number;\n month: number;\n day: number;\n isLeapMonth: boolean;\n secha: string;\n wolgeon: string;\n iljin: string;\n julianDay: number;\n dayOfWeek: number;\n}\n\nexport interface SolarDate {\n year: number;\n month: number;\n day: number;\n}\n\n/**\n * 양력을 음력으로 변환합니다.\n * 양력 지원 날짜 범위: 1890년 1월 21일 ~ 2050년 12월 31일\n * @param solYear 양력 연도\n * @param solMonth 양력 월\n * @param solDay 양력 일\n * @returns 음력 날짜\n */\nexport const toLunar = (solYear: number, solMonth: number, solDay: number): LunarDate => {\n solYear = toInt(solYear);\n solMonth = toInt(solMonth);\n solDay = toInt(solDay);\n\n if (!SolarTable.isDateInRange(solYear, solMonth, solDay)) {\n throw new RangeError(`지원되지 않는 날짜입니다. 입력한 날짜: ${solYear}-${solMonth}-${solDay}`);\n }\n\n let year = Math.min(solYear, LunarTable.MAX_YEAR);\n let month = solYear > LunarTable.MAX_YEAR ? LunarTable.MAX_MONTH : solMonth;\n let day = 1;\n\n const lunTotalDays = LunarTable.getTotalDays(year, month, day, true);\n const solTotalDays = SolarTable.getTotalDays(solYear, solMonth, solDay);\n\n const diffDays = solTotalDays - SOLAR_LUNAR_DAY_DIFF - lunTotalDays;\n day += diffDays;\n\n let day2 = solTotalDays - SOLAR_LUNAR_DAY_DIFF;\n\n let julianDay = JULIAN_DAY_DIFF + day2 - 1;\n let dayOfWeek = (day2 + 1) % 7;\n\n let isLeapMonth = month === LunarTable.getLeapMonth(year);\n let monthDays;\n\n while (day < 1) {\n if (isLeapMonth) {\n isLeapMonth = false;\n } else {\n month--;\n\n if (month === 0) {\n month = 12;\n year--;\n }\n\n isLeapMonth = month === LunarTable.getLeapMonth(year);\n }\n\n monthDays = isLeapMonth ? LunarTable.getLeapMonthDays(year, month) : LunarTable.getMonthDays(year, month);\n day += monthDays;\n }\n\n return {\n year,\n month,\n day,\n isLeapMonth,\n secha: LunarTable.getSecha(year),\n wolgeon: isLeapMonth ? \"\" : LunarTable.getWolgeon(year, month),\n iljin: LunarTable.getIljinByJulianDay(julianDay),\n julianDay,\n dayOfWeek,\n };\n};\n\n/**\n * 음력을 양력으로 변환합니다.\n * 음력 지원 날짜 범위: 1890년 1월 1일 ~ 2050년 11월 18일\n * @param lunYear 음력 연도\n * @param lunMonth 음력 월\n * @param lunDay 음력 일\n * @param isLeapMonth 음력 윤달 여부, 윤달이면 true\n * @returns 양력 날짜\n */\nexport const toSolar = (lunYear: number, lunMonth: number, lunDay: number, isLeapMonth: boolean): SolarDate => {\n lunYear = toInt(lunYear);\n lunMonth = toInt(lunMonth);\n lunDay = toInt(lunDay);\n\n if (!LunarTable.isDateInRange(lunYear, lunMonth, lunDay)) {\n throw new RangeError(`지원되지 않는 날짜입니다. 입력한 날짜: ${lunYear}-${lunMonth}-${lunDay}`);\n }\n\n const lunTotalDays = LunarTable.getTotalDays(lunYear, lunMonth, lunDay, isLeapMonth);\n const solTotalDays = SolarTable.getTotalDays(lunYear, lunMonth, lunDay);\n\n const diffDays = lunTotalDays - (solTotalDays - SOLAR_LUNAR_DAY_DIFF);\n\n let year = lunYear;\n let month = lunMonth;\n let day = lunDay + diffDays;\n\n let monthDays = SolarTable.getMonthDays(year, month);\n\n while (day > monthDays) {\n day -= monthDays;\n month++;\n\n if (month > 12) {\n month = 1;\n year++;\n }\n\n monthDays = SolarTable.getMonthDays(year, month);\n }\n\n return { year, month, day };\n};\n\nexport { LunarTable, SolarTable };\n\n/** @deprecated `LunarData`는 `LunarTable`로 이름이 변경되었습니다. */\nexport const LunarData = LunarTable;\n/** @deprecated `SolarData`는 `SolarTable`로 이름이 변경되었습니다. */\nexport const SolarData = SolarTable;\n","import { toLunar, toSolar, LunarTable, SolarTable, LunarData, SolarData, LunarDate, SolarDate } from \"./kor-lunar\";\n\nconst korLunar = { toLunar, toSolar, LunarTable, SolarTable, LunarData, SolarData };\nexport default korLunar;\nexport { toLunar, toSolar, LunarTable, SolarTable, LunarData, SolarData, LunarDate, SolarDate };\n"],"names":["BASE_YEAR","BASE_MONTH","BASE_DAY","BASE_VALUE","MAX_YEAR","MAX_MONTH","MAX_DAY","MAX_VALUE","totalDaysBeforeYear","getMonthDays","getYearDays","y","idx","getTotalDaysBeforeYear","getTotalDaysBeforeMonth","getTotalDays","isDateInRange","isValidDate","SolarTable.isDateInRange","LunarTable.MAX_YEAR","LunarTable.MAX_MONTH","LunarTable.getTotalDays","SolarTable.getTotalDays","LunarTable.getLeapMonth","LunarTable.getLeapMonthDays","LunarTable.getMonthDays","LunarTable.getSecha","LunarTable.getWolgeon","LunarTable.getIljinByJulianDay","LunarTable.isDateInRange","SolarTable.getMonthDays"],"mappings":"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"}
|
package/dist/kor-lunar.min.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
var korLunar=function(n){"use strict";var
|
|
1
|
+
var korLunar=function(n){"use strict";var r=function(n){return~~n},t=[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],e=["갑","을","병","정","무","기","경","신","임","계"],a=["자","축","인","묘","진","사","오","미","신","유","술","해"],o=1890,u=18900101,i=2050,f=20501118,c=[],l=function(n){return n=r(n),t[n-o]},g=function(n,t){return t=r(t),0===(l(n)>>t-1&1)?29:30},A=function(n){return l(n)>>12&15},h=function(n){return 0!==A(n)},M=function(n,t){return(t=r(t))===A(n)},_=function(n,r){return M(n,r)?0===(l(n)>>16&1)?29:30:0},D=function(n){return l(n)>>17&511};c[0]=0;for(var s=1891;s<=i;s++){var v=s-o;c[v]=c[v-1]+D(s-1)}var y=function(n){return n=r(n),c[n-o]},E=function(n,t,e){t=r(t);for(var a=A(n),o=0,u=1;u<t;u++)o+=g(n,u),u===a&&(o+=_(n,u));return e&&a===t&&(o+=g(n,t)),o},L=function(n,t,e,a){return e=r(e),y(n)+E(n,t,a)+e},S=function(n){return n=r(n),e[(n+6)%e.length]+a[(n+8)%a.length]},T=function(n,t){return n=r(n),t=r(t),e[(2*n+t+3)%e.length]+a[(t+1)%a.length]},B=function(n){return n=r(n),e[(n-1)%e.length]+a[(n+1)%a.length]},Y=function(n,t,e){var a=1e4*(n=r(n))+100*(t=r(t))+(e=r(e));return a>=u&&a<=f},d=Object.freeze({__proto__:null,BASE_DAY:1,BASE_MONTH:1,BASE_VALUE:u,BASE_YEAR:o,MAX_DAY:18,MAX_MONTH:11,MAX_VALUE:f,MAX_YEAR:i,getIljin:function(n,r,t,e){var a=L(n,r,t,e);return B(a-1)},getIljinByJulianDay:B,getLeapMonth:A,getLeapMonthDays:_,getMonthDays:g,getMonthFromIndex:function(n,r){var t=A(n),e=!1,a=r;return t>0&&(a===t&&(e=!0),a>=t&&a--),{month:a+1,isLeapMonth:e}},getMonthIndex:function(n,t,e){var a=t=r(t);if(h(n)){var o=A(n);(e&&t===o||t>o)&&a++}return a-1},getSecha:S,getTotalDays:L,getTotalDaysBeforeMonth:E,getTotalDaysBeforeYear:y,getWolgeon:T,getYearDays:D,hasLeapMonth:h,isDateInRange:Y,isLeapMonth:M,isValidDate:function(n,t,e,a){if(n=r(n),t=r(t),e=r(e),n<o||n>i)return!1;if(n===o){if(t<1)return!1;if(1===t&&e<1)return!1}if(n===i){if(t>11)return!1;if(11===t&&e>18)return!1}return!(t<1||t>12)&&(!(e<1)&&e<=(a?_(n,t):g(n,t)))}}),p=[31,28,31,30,31,30,31,31,30,31,30,31],O=1890,R=18900121,X=2050,b=20501231,j=[],I=function(n){return(n=r(n))%4==0&&n%100!=0||n%400==0},V=function(n,t){return 2===(t=r(t))&&I(n)?29:p[t-1]},m=function(n){return I(n)?366:365};j[0]=0;for(var w=1891;w<=X;w++){var H=w-O;j[H]=j[H-1]+m(w-1)}var N=function(n){return n=r(n),j[n-O]},U=function(n,r){for(var t=0,e=1;e<r;e++)t+=V(n,e);return t},k=function(n,r,t){return N(n)+U(n,r)+t},x=function(n,t,e){var a=1e4*(n=r(n))+100*(t=r(t))+(e=r(e));return a>=R&&a<=b},z=Object.freeze({__proto__:null,BASE_DAY:21,BASE_MONTH:1,BASE_VALUE:R,BASE_YEAR:O,MAX_DAY:31,MAX_MONTH:12,MAX_VALUE:b,MAX_YEAR:X,getMonthDays:V,getTotalDays:k,getTotalDaysBeforeMonth:U,getTotalDaysBeforeYear:N,getYearDays:m,isDateInRange:x,isLeapYear:I,isValidDate:function(n,t,e){if(n=r(n),t=r(t),e=r(e),n<O||n>X)return!1;if(n===O){if(t<1)return!1;if(1===t&&e<21)return!1}if(n===X){if(t>12)return!1;if(12===t&&e>31)return!1}return!(t<1||t>12)&&(!(e<1)&&e<=V(n,t))}}),W=function(n,t,e){if(n=r(n),t=r(t),e=r(e),!x(n,t,e))throw new RangeError("지원되지 않는 날짜입니다. 입력한 날짜: ".concat(n,"-").concat(t,"-").concat(e));var a=Math.min(n,i),o=n>i?11:t,u=1,f=L(a,o,u,!0),c=k(n,t,e);u+=c-20-f;for(var l=c-20,h=2411389+l-1,M=(l+1)%7,D=o===A(a);u<1;)D?D=!1:(0===--o&&(o=12,a--),D=o===A(a)),u+=D?_(a,o):g(a,o);return{year:a,month:o,day:u,isLeapMonth:D,secha:S(a),wolgeon:D?"":T(a,o),iljin:B(h),julianDay:h,dayOfWeek:M}},F=function(n,t,e,a){if(n=r(n),t=r(t),e=r(e),!Y(n,t,e))throw new RangeError("지원되지 않는 날짜입니다. 입력한 날짜: ".concat(n,"-").concat(t,"-").concat(e));for(var o=n,u=t,i=e+(L(n,t,e,a)-(k(n,t,e)-20)),f=V(o,u);i>f;)i-=f,++u>12&&(u=1,o++),f=V(o,u);return{year:o,month:u,day:i}},J=d,P=z,q={toLunar:W,toSolar:F,LunarTable:d,SolarTable:z,LunarData:J,SolarData:P};return n.LunarData=J,n.LunarTable=d,n.SolarData=P,n.SolarTable=z,n.default=q,n.toLunar=W,n.toSolar=F,Object.defineProperty(n,"__esModule",{value:!0}),n}({});
|
|
2
2
|
//# sourceMappingURL=kor-lunar.min.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"kor-lunar.min.js","sources":[],"sourcesContent":[],"names":[],"mappings":""}
|
|
1
|
+
{"version":3,"file":"kor-lunar.min.js","sources":["../src/utils.ts","../src/lunar-table.ts","../src/solar-table.ts","../src/kor-lunar.ts","../src/index.ts"],"sourcesContent":["export const toInt = (num: string | number): number => {\n return ~~num;\n};\n","import { toInt } from \"./utils\";\n\n/**\n * 음력 테이블\n *\n * 9b (17-25): 해당 해의 총 음력 일 수 (예: 384)\n *\n * 1b ( 16): 윤달의 크기 (0: 29일, 1: 30일)\n *\n * 4b (12-15): 윤달 위치 (1-12, 윤달이 없으면 0)\n *\n * 12b ( 0-11): 각 월의 크기 (0: 29일, 1: 30일)\n */\nconst LUN_TABLE = [\n /* 0 1 2 3 4 5 6 7 8 9 */\n /*1890*/ 0x3002ab6, 0x2c60daa, 0x3006ee4, 0x2c40ea4, 0x2c40d4a, 0x2fe5555, 0x2c60a97, 0x2c40556, 0x300355d, 0x2c60ad5,\n /*1900*/ 0x3008bd2, 0x2c40752, 0x2c60ea5, 0x2fe5b2a, 0x2c4064b, 0x2c60a9b, 0x3014aa6, 0x2c4056a, 0x2c60b59, 0x3002baa,\n /*1910*/ 0x2c40752, 0x3006da5, 0x2c40b25, 0x2c40a4b, 0x300595b, 0x2c60aad, 0x2c4056a, 0x30025b5, 0x2c60ba9, 0x3007dd2,\n /*1920*/ 0x2c40d92, 0x2c40d25, 0x3005d2d, 0x2c40956, 0x2c402b5, 0x3024add, 0x2c406d4, 0x2c60da9, 0x3002eca, 0x2c40e92,\n /*1930*/ 0x2fe66a6, 0x2c40527, 0x2c60a57, 0x3015956, 0x2c60ada, 0x2c406d4, 0x3013751, 0x2c40749, 0x3017b13, 0x2c40a93,\n /*1940*/ 0x2c4052b, 0x301651b, 0x2c6096d, 0x2c60b6a, 0x3014da4, 0x2c40ba4, 0x2c40b49, 0x3002d4b, 0x2c40a95, 0x3007aab,\n /*1950*/ 0x2c4052d, 0x2c60aad, 0x3015aaa, 0x2c60db2, 0x2c40da4, 0x3013ea1, 0x2c40d4a, 0x3008d95, 0x2c40a96, 0x2c40556,\n /*1960*/ 0x3006575, 0x2c60ad5, 0x2c406d2, 0x3004755, 0x2c60ea5, 0x2c40e4a, 0x2fe364e, 0x2c60a9b, 0x3007ad6, 0x2c4056a,\n /*1970*/ 0x2c60b59, 0x3005bb2, 0x2c40752, 0x2c40725, 0x3004b2b, 0x2c40a4b, 0x30089ab, 0x2c402ad, 0x2c6056b, 0x30165a9,\n /*1980*/ 0x2c60da9, 0x2c40d92, 0x3004d95, 0x2c40d25, 0x300ae4d, 0x2c40a56, 0x2c402b6, 0x3026aed, 0x2c406d4, 0x2c60da9,\n /*1990*/ 0x3005ed2, 0x2c40e92, 0x2c40d26, 0x2fe352e, 0x2c60a57, 0x30089b6, 0x2c60b5a, 0x2c406d4, 0x3005769, 0x2c40749,\n /*2000*/ 0x2c40693, 0x3004a97, 0x2c4052b, 0x2c60a5b, 0x3002aae, 0x2c4036a, 0x3027dd5, 0x2c40ba4, 0x2c40b49, 0x3005d53,\n /*2010*/ 0x2c40a95, 0x2c4052d, 0x301352d, 0x2c60aad, 0x3009baa, 0x2c405d2, 0x2c60da5, 0x3005eaa, 0x2c40d4a, 0x2c40a95,\n /*2020*/ 0x3004a9d, 0x2c40556, 0x2c60ab5, 0x3002ad6, 0x2c406d2, 0x3006765, 0x2c60ea5, 0x2c40e4a, 0x2fe5656, 0x2c60c9b,\n /*2030*/ 0x2c4055a, 0x300356d, 0x2c60b69, 0x300bf52, 0x2c40752, 0x2c40b25, 0x3016b0b, 0x2c40a4b, 0x2c404ab, 0x30052bb,\n /*2040*/ 0x2c6056d, 0x2c60b69, 0x3002daa, 0x2c40d92, 0x3007ea5, 0x2c40d25, 0x2c40a4d, 0x3015a4d, 0x2c402b6, 0x2c605b5,\n /*2050*/ 0x00136d1 /* 11월 18일 까지라 데이터 부족 */,\n];\n\nconst gan = [\"갑\", \"을\", \"병\", \"정\", \"무\", \"기\", \"경\", \"신\", \"임\", \"계\"];\nconst ji = [\"자\", \"축\", \"인\", \"묘\", \"진\", \"사\", \"오\", \"미\", \"신\", \"유\", \"술\", \"해\"];\n\nexport const BASE_YEAR = 1890;\nexport const BASE_MONTH = 1;\nexport const BASE_DAY = 1;\nexport const BASE_VALUE = BASE_YEAR * 10000 + BASE_MONTH * 100 + BASE_DAY;\n\nexport const MAX_YEAR = 2050;\nexport const MAX_MONTH = 11;\nexport const MAX_DAY = 18;\nexport const MAX_VALUE = MAX_YEAR * 10000 + MAX_MONTH * 100 + MAX_DAY;\n\nconst SMALL_MONTH_DAY = 29;\nconst BIG_MONTH_DAY = 30;\n\nconst totalDaysBeforeYear: number[] = [];\n\nconst getYearData = (year: number): number => {\n year = toInt(year);\n return LUN_TABLE[year - BASE_YEAR];\n};\n\n/**\n * 해당 월 (평달)의 일 수를 반환합니다.\n * @param year 1890년 ~ 2050년\n * @param month 1월 ~ 12월\n * @returns 월의 일 수 (29 또는 30)\n */\nexport const getMonthDays = (year: number, month: number): number => {\n month = toInt(month);\n const monthType = (getYearData(year) >> (month - 1)) & 0x1;\n return monthType === 0 ? SMALL_MONTH_DAY : BIG_MONTH_DAY;\n};\n\n/**\n * 해당 연도의 윤달을 반환합니다.\n * @param year 1890년 ~ 2050년\n * @returns 윤달 월 (1월 ~ 12월), 없으면 0\n */\nexport const getLeapMonth = (year: number): number => {\n return (getYearData(year) >> 12) & 0xf;\n};\n\n/**\n * 해당 연도에 윤달이 있는지를 반환합니다.\n * @param year 1890년 ~ 2050년\n * @return 윤달이 있으면 true\n */\nexport const hasLeapMonth = (year: number): boolean => {\n return getLeapMonth(year) !== 0;\n};\n\n/**\n * 해당 월이 윤달인지를 반환합니다.\n * @param year 1890년 ~ 2050년\n * @param month 1월 ~ 12월\n * @returns 윤달이면 true\n */\nexport const isLeapMonth = (year: number, month: number): boolean => {\n month = toInt(month);\n return month === getLeapMonth(year);\n};\n\n/**\n * 해당 월 (윤달)의 일 수를 반환합니다.\n * @param year 1890년 ~ 2050년\n * @param month 1월 ~ 12월\n * @returns 윤달의 일 수 (29 또는 30), 윤달이 아니면 0\n */\nexport const getLeapMonthDays = (year: number, month: number): number => {\n if (!isLeapMonth(year, month)) return 0;\n const monthType = (getYearData(year) >> 16) & 0x1;\n return monthType === 0 ? SMALL_MONTH_DAY : BIG_MONTH_DAY;\n};\n\n/**\n * 해당 연도의 총 일 수를 반환합니다.\n * @param year 1890년 ~ 2050년\n * @return 해당 연도의 총 일 수\n */\nexport const getYearDays = (year: number): number => {\n return (getYearData(year) >> 17) & 0x1ff;\n};\n\n/**\n * 연도별 누적 일 수를 초기에 룩업 테이블로 생성하여\n * O(1)으로 누적 일 수를 가져오게 변환함\n */\ntotalDaysBeforeYear[0] = 0;\nfor (let y = BASE_YEAR + 1; y <= MAX_YEAR; y++) {\n const idx = y - BASE_YEAR;\n totalDaysBeforeYear[idx] = totalDaysBeforeYear[idx - 1] + getYearDays(y - 1);\n}\n\n/**\n * 1890년부터 해당 연도 전까지의 누적 일 수를 반환합니다.\n * @param year 1890년 ~ 2050년\n * @return 해당 연도 전까지의 누적 일 수\n */\nexport const getTotalDaysBeforeYear = (year: number): number => {\n year = toInt(year);\n return totalDaysBeforeYear[year - BASE_YEAR];\n};\n\n/**\n * 해당 연도 내에서 해당 월 (및 윤달 포함) 전까지의 누적 일 수를 반환합니다.\n * @param year 1890년 ~ 2050년\n * @param month 1월 ~ 12월\n * @param isLeapMonth 대상이 윤달이면 true\n * @returns 해당 연도 내, 해당 월 전까지의 누적 일 수\n */\nexport const getTotalDaysBeforeMonth = (year: number, month: number, isLeapMonth: boolean): number => {\n month = toInt(month);\n const leapMonth = getLeapMonth(year);\n let days = 0;\n // 해당 월 전까지 윤달을 포함하여 누적\n for (let m = 1; m < month; m++) {\n days += getMonthDays(year, m);\n if (m === leapMonth) {\n days += getLeapMonthDays(year, m);\n }\n }\n // 대상이 윤달이면, 앞에 있는 평달을 누적\n if (isLeapMonth && leapMonth === month) {\n days += getMonthDays(year, month);\n }\n return days;\n};\n\n/**\n * 1890년부터 해당 연도, 월, 일 (및 윤달 포함) 까지의 누적 일 수를 반환합니다.\n * @param year 1890년 ~ 2050년\n * @param month 1월 ~ 12월\n * @param day 일자\n * @param isLeapMonth 대상이 윤달이면 true\n * @returns 총 누적 일 수\n */\nexport const getTotalDays = (year: number, month: number, day: number, isLeapMonth: boolean): number => {\n day = toInt(day);\n let days = getTotalDaysBeforeYear(year) + getTotalDaysBeforeMonth(year, month, isLeapMonth) + day;\n return days;\n};\n\nexport const getSecha = (year: number): string => {\n year = toInt(year);\n const g = gan[(year + 6) % gan.length];\n const j = ji[(year + 8) % ji.length];\n return g + j;\n};\n\nexport const getWolgeon = (year: number, month: number): string => {\n year = toInt(year);\n month = toInt(month);\n const g = gan[(year * 2 + month + 3) % gan.length];\n const j = ji[(month + 1) % ji.length];\n return g + j;\n};\n\nexport const getIljinByJulianDay = (julianDay: number): string => {\n julianDay = toInt(julianDay);\n const g = gan[(julianDay - 1) % gan.length];\n const j = ji[(julianDay + 1) % ji.length];\n return g + j;\n};\n\nexport const getIljin = (year: number, month: number, day: number, isLeapMonth: boolean): string => {\n const days = getTotalDays(year, month, day, isLeapMonth);\n return getIljinByJulianDay(days - 1);\n};\n\n/**\n * 날짜가 지원하는 범위 내에 있는지를 반환합니다.\n * 날짜의 유효성 (존재 여부)은 검사하지 않습니다.\n * @returns 날짜가 범위 내에 있으면 true\n */\nexport const isDateInRange = (year: number, month: number, day: number): boolean => {\n year = toInt(year);\n month = toInt(month);\n day = toInt(day);\n const value = year * 10000 + month * 100 + day;\n return value >= BASE_VALUE && value <= MAX_VALUE;\n};\n\n/**\n * 실제로 존재하는 유효한 날짜인지를 반환합니다.\n * @returns 유효한 날짜이면 true\n */\nexport const isValidDate = (year: number, month: number, day: number, isLeapMonth: boolean): boolean => {\n year = toInt(year);\n month = toInt(month);\n day = toInt(day);\n if (year < BASE_YEAR || year > MAX_YEAR) return false;\n\n if (year === BASE_YEAR) {\n if (month < BASE_MONTH) return false;\n if (month === BASE_MONTH && day < BASE_DAY) return false;\n }\n\n if (year === MAX_YEAR) {\n if (month > MAX_MONTH) return false;\n if (month === MAX_MONTH && day > MAX_DAY) return false;\n }\n\n if (month < 1 || month > 12) return false;\n if (day < 1) return false;\n\n const endDay = isLeapMonth ? getLeapMonthDays(year, month) : getMonthDays(year, month);\n return day <= endDay;\n};\n\n/**\n * 해당 월의 0-based 연속적인 월 인덱스를 반환합니다.\n * @param year 1890년 ~ 2050년\n * @param month 1월 ~ 12월\n * @param isLeapMonth 대상이 윤달이면 true\n * @returns 윤달이 있는 해는 0 ~ 12 (13개월), 없는 해는 0 ~ 11 (12개월)\n */\nexport const getMonthIndex = (year: number, month: number, isLeapMonth: boolean): number => {\n month = toInt(month);\n let index = month;\n if (hasLeapMonth(year)) {\n const leapMonth = getLeapMonth(year);\n if ((isLeapMonth && month === leapMonth) || month > leapMonth) {\n index++;\n }\n }\n return index - 1;\n};\n\n/**\n * 0-based 연속적인 월 인덱스에 해당하는 월과 윤달 여부를 반환합니다.\n * @param year 1890년 ~ 2050년\n * @param monthIndex 윤달이 있는 해는 0 ~ 12 (13개월), 없는 해는 0 ~ 11 (12개월)\n * @returns month (1~12)와 isLeapMonth 여부\n */\nexport const getMonthFromIndex = (year: number, monthIndex: number): { month: number; isLeapMonth: boolean } => {\n const leapMonth = getLeapMonth(year);\n let isLeapMonth = false;\n let index = monthIndex;\n if (leapMonth > 0) {\n if (index === leapMonth) {\n isLeapMonth = true;\n }\n if (index >= leapMonth) {\n index--;\n }\n }\n return { month: index + 1, isLeapMonth };\n};\n","import { toInt } from \"./utils\";\n\nconst MONTH_DAYS = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];\n\nconst LEAP_FEBRUARY_DAY = 29;\n\nconst YEAR_DAY = 365;\nconst LEAP_YEAR_DAY = 366;\n\nexport const BASE_YEAR = 1890;\nexport const BASE_MONTH = 1;\nexport const BASE_DAY = 21;\nexport const BASE_VALUE = BASE_YEAR * 10000 + BASE_MONTH * 100 + BASE_DAY;\n\nexport const MAX_YEAR = 2050;\nexport const MAX_MONTH = 12;\nexport const MAX_DAY = 31;\nexport const MAX_VALUE = MAX_YEAR * 10000 + MAX_MONTH * 100 + MAX_DAY;\n\nconst totalDaysBeforeYear: number[] = [];\n\nexport const isLeapYear = (year: number): boolean => {\n year = toInt(year);\n return (year % 4 === 0 && year % 100 !== 0) || year % 400 === 0;\n};\n\nexport const getMonthDays = (year: number, month: number): number => {\n month = toInt(month);\n let day = month === 2 && isLeapYear(year) ? LEAP_FEBRUARY_DAY : MONTH_DAYS[month - 1];\n return day;\n};\n\nexport const getYearDays = (year: number): number => {\n let day = isLeapYear(year) ? LEAP_YEAR_DAY : YEAR_DAY;\n return day;\n};\n\n/**\n * 연도별 누적 일 수를 초기에 룩업 테이블로 생성하여\n * O(1)으로 누적 일 수를 가져오게 변환함\n */\ntotalDaysBeforeYear[0] = 0;\nfor (let y = BASE_YEAR + 1; y <= MAX_YEAR; y++) {\n const idx = y - BASE_YEAR;\n totalDaysBeforeYear[idx] = totalDaysBeforeYear[idx - 1] + getYearDays(y - 1);\n}\n\nexport const getTotalDaysBeforeYear = (year: number): number => {\n year = toInt(year);\n return totalDaysBeforeYear[year - BASE_YEAR];\n};\n\nexport const getTotalDaysBeforeMonth = (year: number, month: number): number => {\n let day = 0;\n for (let m = 1; m < month; m++) {\n day += getMonthDays(year, m);\n }\n return day;\n};\n\nexport const getTotalDays = (year: number, month: number, day: number): number => {\n let days = getTotalDaysBeforeYear(year) + getTotalDaysBeforeMonth(year, month) + day;\n return days;\n};\n\n/**\n * 날짜가 지원하는 범위 내에 있는지를 반환합니다.\n * 날짜의 유효성 (존재 여부)은 검사하지 않습니다.\n * @returns 날짜가 범위 내에 있으면 true\n */\nexport const isDateInRange = (year: number, month: number, day: number): boolean => {\n year = toInt(year);\n month = toInt(month);\n day = toInt(day);\n const value = year * 10000 + month * 100 + day;\n return value >= BASE_VALUE && value <= MAX_VALUE;\n};\n\n/**\n * 실제로 존재하는 유효한 날짜인지를 반환합니다.\n * @returns 유효한 날짜이면 true\n */\nexport const isValidDate = (year: number, month: number, day: number): boolean => {\n year = toInt(year);\n month = toInt(month);\n day = toInt(day);\n if (year < BASE_YEAR || year > MAX_YEAR) return false;\n\n if (year === BASE_YEAR) {\n if (month < BASE_MONTH) return false;\n if (month === BASE_MONTH && day < BASE_DAY) return false;\n }\n\n if (year === MAX_YEAR) {\n if (month > MAX_MONTH) return false;\n if (month === MAX_MONTH && day > MAX_DAY) return false;\n }\n\n if (month < 1 || month > 12) return false;\n if (day < 1) return false;\n\n const endDay = getMonthDays(year, month);\n return day <= endDay;\n};\n","import * as LunarTable from \"./lunar-table\";\nimport * as SolarTable from \"./solar-table\";\nimport { toInt } from \"./utils\";\n\nconst SOLAR_LUNAR_DAY_DIFF = 20;\nconst JULIAN_DAY_DIFF = 2411389;\n\nexport interface LunarDate {\n year: number;\n month: number;\n day: number;\n isLeapMonth: boolean;\n secha: string;\n wolgeon: string;\n iljin: string;\n julianDay: number;\n dayOfWeek: number;\n}\n\nexport interface SolarDate {\n year: number;\n month: number;\n day: number;\n}\n\n/**\n * 양력을 음력으로 변환합니다.\n * 양력 지원 날짜 범위: 1890년 1월 21일 ~ 2050년 12월 31일\n * @param solYear 양력 연도\n * @param solMonth 양력 월\n * @param solDay 양력 일\n * @returns 음력 날짜\n */\nexport const toLunar = (solYear: number, solMonth: number, solDay: number): LunarDate => {\n solYear = toInt(solYear);\n solMonth = toInt(solMonth);\n solDay = toInt(solDay);\n\n if (!SolarTable.isDateInRange(solYear, solMonth, solDay)) {\n throw new RangeError(`지원되지 않는 날짜입니다. 입력한 날짜: ${solYear}-${solMonth}-${solDay}`);\n }\n\n let year = Math.min(solYear, LunarTable.MAX_YEAR);\n let month = solYear > LunarTable.MAX_YEAR ? LunarTable.MAX_MONTH : solMonth;\n let day = 1;\n\n const lunTotalDays = LunarTable.getTotalDays(year, month, day, true);\n const solTotalDays = SolarTable.getTotalDays(solYear, solMonth, solDay);\n\n const diffDays = solTotalDays - SOLAR_LUNAR_DAY_DIFF - lunTotalDays;\n day += diffDays;\n\n let day2 = solTotalDays - SOLAR_LUNAR_DAY_DIFF;\n\n let julianDay = JULIAN_DAY_DIFF + day2 - 1;\n let dayOfWeek = (day2 + 1) % 7;\n\n let isLeapMonth = month === LunarTable.getLeapMonth(year);\n let monthDays;\n\n while (day < 1) {\n if (isLeapMonth) {\n isLeapMonth = false;\n } else {\n month--;\n\n if (month === 0) {\n month = 12;\n year--;\n }\n\n isLeapMonth = month === LunarTable.getLeapMonth(year);\n }\n\n monthDays = isLeapMonth ? LunarTable.getLeapMonthDays(year, month) : LunarTable.getMonthDays(year, month);\n day += monthDays;\n }\n\n return {\n year,\n month,\n day,\n isLeapMonth,\n secha: LunarTable.getSecha(year),\n wolgeon: isLeapMonth ? \"\" : LunarTable.getWolgeon(year, month),\n iljin: LunarTable.getIljinByJulianDay(julianDay),\n julianDay,\n dayOfWeek,\n };\n};\n\n/**\n * 음력을 양력으로 변환합니다.\n * 음력 지원 날짜 범위: 1890년 1월 1일 ~ 2050년 11월 18일\n * @param lunYear 음력 연도\n * @param lunMonth 음력 월\n * @param lunDay 음력 일\n * @param isLeapMonth 음력 윤달 여부, 윤달이면 true\n * @returns 양력 날짜\n */\nexport const toSolar = (lunYear: number, lunMonth: number, lunDay: number, isLeapMonth: boolean): SolarDate => {\n lunYear = toInt(lunYear);\n lunMonth = toInt(lunMonth);\n lunDay = toInt(lunDay);\n\n if (!LunarTable.isDateInRange(lunYear, lunMonth, lunDay)) {\n throw new RangeError(`지원되지 않는 날짜입니다. 입력한 날짜: ${lunYear}-${lunMonth}-${lunDay}`);\n }\n\n const lunTotalDays = LunarTable.getTotalDays(lunYear, lunMonth, lunDay, isLeapMonth);\n const solTotalDays = SolarTable.getTotalDays(lunYear, lunMonth, lunDay);\n\n const diffDays = lunTotalDays - (solTotalDays - SOLAR_LUNAR_DAY_DIFF);\n\n let year = lunYear;\n let month = lunMonth;\n let day = lunDay + diffDays;\n\n let monthDays = SolarTable.getMonthDays(year, month);\n\n while (day > monthDays) {\n day -= monthDays;\n month++;\n\n if (month > 12) {\n month = 1;\n year++;\n }\n\n monthDays = SolarTable.getMonthDays(year, month);\n }\n\n return { year, month, day };\n};\n\nexport { LunarTable, SolarTable };\n\n/** @deprecated `LunarData`는 `LunarTable`로 이름이 변경되었습니다. */\nexport const LunarData = LunarTable;\n/** @deprecated `SolarData`는 `SolarTable`로 이름이 변경되었습니다. */\nexport const SolarData = SolarTable;\n","import { toLunar, toSolar, LunarTable, SolarTable, LunarData, SolarData, LunarDate, SolarDate } from \"./kor-lunar\";\n\nconst korLunar = { toLunar, toSolar, LunarTable, SolarTable, LunarData, SolarData };\nexport default korLunar;\nexport { toLunar, toSolar, LunarTable, SolarTable, LunarData, SolarData, LunarDate, SolarDate };\n"],"names":["toInt","num","LUN_TABLE","gan","ji","BASE_YEAR","BASE_VALUE","MAX_YEAR","MAX_VALUE","totalDaysBeforeYear","getYearData","year","getMonthDays","month","getLeapMonth","hasLeapMonth","isLeapMonth","getLeapMonthDays","getYearDays","y","idx","getTotalDaysBeforeYear","getTotalDaysBeforeMonth","leapMonth","days","m","getTotalDays","day","getSecha","length","getWolgeon","getIljinByJulianDay","julianDay","isDateInRange","value","monthIndex","index","MONTH_DAYS","isLeapYear","toLunar","solYear","solMonth","solDay","SolarTable.isDateInRange","RangeError","concat","Math","min","LunarTable.MAX_YEAR","lunTotalDays","LunarTable.getTotalDays","solTotalDays","SolarTable.getTotalDays","day2","dayOfWeek","LunarTable.getLeapMonth","LunarTable.getLeapMonthDays","LunarTable.getMonthDays","secha","LunarTable.getSecha","wolgeon","LunarTable.getWolgeon","iljin","LunarTable.getIljinByJulianDay","toSolar","lunYear","lunMonth","lunDay","LunarTable.isDateInRange","monthDays","SolarTable.getMonthDays","LunarData","LunarTable","SolarData","SolarTable","korLunar"],"mappings":"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"}
|
package/dist/lunar-table.d.ts
CHANGED
|
@@ -88,13 +88,13 @@ export declare const isValidDate: (year: number, month: number, day: number, isL
|
|
|
88
88
|
* @param year 1890년 ~ 2050년
|
|
89
89
|
* @param month 1월 ~ 12월
|
|
90
90
|
* @param isLeapMonth 대상이 윤달이면 true
|
|
91
|
-
* @returns 윤달이 있는 해는 0~12 (13개월), 없는 해는 0~11 (12개월)
|
|
91
|
+
* @returns 윤달이 있는 해는 0 ~ 12 (13개월), 없는 해는 0 ~ 11 (12개월)
|
|
92
92
|
*/
|
|
93
93
|
export declare const getMonthIndex: (year: number, month: number, isLeapMonth: boolean) => number;
|
|
94
94
|
/**
|
|
95
95
|
* 0-based 연속적인 월 인덱스에 해당하는 월과 윤달 여부를 반환합니다.
|
|
96
96
|
* @param year 1890년 ~ 2050년
|
|
97
|
-
* @param monthIndex 윤달이 있는 해는 0~12 (13개월), 없는 해는 0~11 (12개월)
|
|
97
|
+
* @param monthIndex 윤달이 있는 해는 0 ~ 12 (13개월), 없는 해는 0 ~ 11 (12개월)
|
|
98
98
|
* @returns month (1~12)와 isLeapMonth 여부
|
|
99
99
|
*/
|
|
100
100
|
export declare const getMonthFromIndex: (year: number, monthIndex: number) => {
|
package/package.json
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "kor-lunar",
|
|
3
|
-
"version": "1.5.
|
|
3
|
+
"version": "1.5.2",
|
|
4
|
+
"type": "module",
|
|
4
5
|
"description": "한국 음력 변환 유틸 / Korean lunar calendar converter",
|
|
5
6
|
"main": "dist/kor-lunar.js",
|
|
6
7
|
"module": "dist/kor-lunar.esm.js",
|
|
@@ -40,9 +41,10 @@
|
|
|
40
41
|
},
|
|
41
42
|
"homepage": "https://github.com/kahyou22/kor-lunar-js#readme",
|
|
42
43
|
"devDependencies": {
|
|
43
|
-
"rollup": "^
|
|
44
|
-
"rollup
|
|
45
|
-
"rollup
|
|
44
|
+
"rollup": "^4.24.0",
|
|
45
|
+
"@rollup/plugin-terser": "^0.4.4",
|
|
46
|
+
"@rollup/plugin-typescript": "^12.1.0",
|
|
47
|
+
"tslib": "^2.7.0",
|
|
46
48
|
"typescript": "^5.8.3"
|
|
47
49
|
}
|
|
48
50
|
}
|