kor-lunar 1.3.3 → 1.5.0
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 -13
- package/dist/index.d.ts +6 -4
- package/dist/kor-lunar.d.ts +9 -4
- package/dist/kor-lunar.esm.js +96 -58
- package/dist/kor-lunar.esm.js.map +1 -1
- package/dist/kor-lunar.js +97 -57
- package/dist/kor-lunar.js.map +1 -1
- package/dist/kor-lunar.min.js +1 -1
- package/dist/{lunar-data.d.ts → lunar-table.d.ts} +30 -12
- package/dist/{solar-data.d.ts → solar-table.d.ts} +2 -2
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -1,23 +1,28 @@
|
|
|
1
1
|
# kor-lunar
|
|
2
2
|
|
|
3
|
-
이 라이브러리는 학습용으로 제작되었으며, 한국천문연구원(KASI)의 음력·양력 데이터를 기반으로 한 자바스크립트 라이브러리입니다.
|
|
3
|
+
이 라이브러리는 학습용으로 제작되었으며, 한국천문연구원(KASI)의 음력·양력 변환 데이터를 기반으로 한 자바스크립트 라이브러리입니다.
|
|
4
|
+
네트워크 요청 없이 **오프라인에서도 동작**하고, 별도의 외부 의존성이 없습니다.
|
|
4
5
|
|
|
5
|
-
> **⚠️ 주의:** 데이터는
|
|
6
|
+
> **⚠️ 주의:** 데이터는 **2025년 5월 20일 기준**으로 갱신되었습니다.
|
|
7
|
+
> 이후의 중요한 변경 사항이 반영되지 않을 수 있으므로,
|
|
8
|
+
> 중요한 작업에는 아래 [한국천문연구원 공식 API](#출처-및-참고-자료)를 사용하시기 바랍니다.
|
|
6
9
|
|
|
7
10
|
## 특징
|
|
8
11
|
|
|
9
|
-
- **음력 ↔ 양력 변환**
|
|
10
|
-
- **윤달 처리**
|
|
11
|
-
- **음력 간지
|
|
12
|
+
- **음력 ↔ 양력 변환** - `toLunar`, `toSolar`
|
|
13
|
+
- **윤달 처리** - `isLeapMonth` 옵션
|
|
14
|
+
- **음력 간지 출력** - 세차(`secha`), 월건(`wolgeon`), 일진(`iljin`)
|
|
12
15
|
- 윤달인 경우 `wolgeon`은 빈 문자열로 반환됩니다
|
|
13
|
-
-
|
|
16
|
+
- **TypeScript 지원** - 타입 정의 기본 제공
|
|
17
|
+
- **Zero Dependencies** - 외부 의존성 없음
|
|
18
|
+
- **CJS / ESM / UMD** — 다양한 환경에서 사용 가능
|
|
14
19
|
|
|
15
20
|
- [예제 사이트](https://kahyou22.github.io/kor-lunar-js/)
|
|
16
21
|
|
|
17
22
|
## 지원 날짜 범위
|
|
18
23
|
|
|
19
|
-
- **toLunar**: `양력 → 음력` 날짜 범위 1890년 1월 21일 ~ 2050년
|
|
20
|
-
- **toSolar**: `음력 → 양력` 날짜 범위 1890년 1월 1일 ~
|
|
24
|
+
- **toLunar**: `양력 → 음력` 날짜 범위 1890년 1월 21일 ~ 2050년 12월 31일
|
|
25
|
+
- **toSolar**: `음력 → 양력` 날짜 범위 1890년 1월 1일 ~ 2050년 11월 18일
|
|
21
26
|
|
|
22
27
|
_범위를 벗어난 날짜가 입력될 경우 `RangeError`가 발생하며, 오류 메시지에 입력한 날짜 정보가 포함됩니다._
|
|
23
28
|
|
|
@@ -27,6 +32,14 @@ _범위를 벗어난 날짜가 입력될 경우 `RangeError`가 발생하며,
|
|
|
27
32
|
npm install kor-lunar
|
|
28
33
|
```
|
|
29
34
|
|
|
35
|
+
### 브라우저 CDN
|
|
36
|
+
|
|
37
|
+
```html
|
|
38
|
+
<script src="https://cdn.jsdelivr.net/npm/kor-lunar@1.4/dist/kor-lunar.min.js"></script>
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
CDN 사용 시 전역 변수 `korLunar`로 접근할 수 있습니다.
|
|
42
|
+
|
|
30
43
|
## 사용법
|
|
31
44
|
|
|
32
45
|
### 모듈 불러오기
|
|
@@ -37,10 +50,10 @@ import korLunar from "kor-lunar";
|
|
|
37
50
|
const korLunar = require("kor-lunar");
|
|
38
51
|
```
|
|
39
52
|
|
|
40
|
-
|
|
53
|
+
Named export도 지원합니다:
|
|
41
54
|
|
|
42
|
-
```
|
|
43
|
-
|
|
55
|
+
```js
|
|
56
|
+
import { toLunar, toSolar } from "kor-lunar";
|
|
44
57
|
```
|
|
45
58
|
|
|
46
59
|
## 예제
|
|
@@ -64,6 +77,7 @@ console.log(korLunar.toLunar(2025, 6, 25));
|
|
|
64
77
|
// dayOfWeek: 3
|
|
65
78
|
// }
|
|
66
79
|
|
|
80
|
+
// 양력 → 음력 (윤달)
|
|
67
81
|
console.log(korLunar.toLunar(2025, 7, 25));
|
|
68
82
|
// {
|
|
69
83
|
// year: 2025,
|
|
@@ -85,8 +99,8 @@ console.log(korLunar.toSolar(2025, 6, 1, true));
|
|
|
85
99
|
// { year: 2025, month: 7, day: 25 }
|
|
86
100
|
```
|
|
87
101
|
|
|
88
|
-
> 권장되진 않지만, `korLunar.
|
|
89
|
-
> 이를 통해 단순 음력
|
|
102
|
+
> 권장되진 않지만, `korLunar.LunarTable`과 `korLunar.SolarTable` 같은 내부 함수에 직접 접근할 수도 있습니다.
|
|
103
|
+
> 이를 통해 단순 음력 변환 뿐만 아니라, 더 다양한 기능을 구현할 수 있습니다.
|
|
90
104
|
> [예제 사이트: 음력 달력](https://kahyou22.github.io/kor-lunar-js/#lunarCalendar)
|
|
91
105
|
|
|
92
106
|
## 라이선스
|
package/dist/index.d.ts
CHANGED
|
@@ -1,9 +1,11 @@
|
|
|
1
|
-
import { toLunar, toSolar, LunarData, SolarData, LunarDate, SolarDate } from "./kor-lunar";
|
|
1
|
+
import { toLunar, toSolar, LunarTable, SolarTable, LunarData, SolarData, LunarDate, SolarDate } from "./kor-lunar";
|
|
2
2
|
declare const korLunar: {
|
|
3
3
|
toLunar: (solYear: number, solMonth: number, solDay: number) => LunarDate;
|
|
4
4
|
toSolar: (lunYear: number, lunMonth: number, lunDay: number, isLeapMonth: boolean) => SolarDate;
|
|
5
|
-
|
|
6
|
-
|
|
5
|
+
LunarTable: typeof LunarTable;
|
|
6
|
+
SolarTable: typeof SolarTable;
|
|
7
|
+
LunarData: typeof LunarTable;
|
|
8
|
+
SolarData: typeof SolarTable;
|
|
7
9
|
};
|
|
8
10
|
export default korLunar;
|
|
9
|
-
export { toLunar, toSolar, LunarData, SolarData, LunarDate, SolarDate };
|
|
11
|
+
export { toLunar, toSolar, LunarTable, SolarTable, LunarData, SolarData, LunarDate, SolarDate };
|
package/dist/kor-lunar.d.ts
CHANGED
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
import * as LunarTable from "./lunar-table";
|
|
2
|
+
import * as SolarTable from "./solar-table";
|
|
1
3
|
export interface LunarDate {
|
|
2
4
|
year: number;
|
|
3
5
|
month: number;
|
|
@@ -16,7 +18,7 @@ export interface SolarDate {
|
|
|
16
18
|
}
|
|
17
19
|
/**
|
|
18
20
|
* 양력을 음력으로 변환합니다.
|
|
19
|
-
* 양력 지원 날짜 범위: 1890년 1월 21일 ~ 2050년
|
|
21
|
+
* 양력 지원 날짜 범위: 1890년 1월 21일 ~ 2050년 12월 31일
|
|
20
22
|
* @param solYear 양력 연도
|
|
21
23
|
* @param solMonth 양력 월
|
|
22
24
|
* @param solDay 양력 일
|
|
@@ -25,7 +27,7 @@ export interface SolarDate {
|
|
|
25
27
|
export declare const toLunar: (solYear: number, solMonth: number, solDay: number) => LunarDate;
|
|
26
28
|
/**
|
|
27
29
|
* 음력을 양력으로 변환합니다.
|
|
28
|
-
* 음력 지원 날짜 범위: 1890년 1월 1일 ~
|
|
30
|
+
* 음력 지원 날짜 범위: 1890년 1월 1일 ~ 2050년 11월 18일
|
|
29
31
|
* @param lunYear 음력 연도
|
|
30
32
|
* @param lunMonth 음력 월
|
|
31
33
|
* @param lunDay 음력 일
|
|
@@ -33,5 +35,8 @@ export declare const toLunar: (solYear: number, solMonth: number, solDay: number
|
|
|
33
35
|
* @returns 양력 날짜
|
|
34
36
|
*/
|
|
35
37
|
export declare const toSolar: (lunYear: number, lunMonth: number, lunDay: number, isLeapMonth: boolean) => SolarDate;
|
|
36
|
-
export
|
|
37
|
-
|
|
38
|
+
export { LunarTable, SolarTable };
|
|
39
|
+
/** @deprecated `LunarData`는 `LunarTable`로 이름이 변경되었습니다. */
|
|
40
|
+
export declare const LunarData: typeof LunarTable;
|
|
41
|
+
/** @deprecated `SolarData`는 `SolarTable`로 이름이 변경되었습니다. */
|
|
42
|
+
export declare const SolarData: typeof SolarTable;
|
package/dist/kor-lunar.esm.js
CHANGED
|
@@ -33,6 +33,7 @@ var LUN_TABLE = [
|
|
|
33
33
|
/*2020*/ 0x3004a9d, 0x2c40556, 0x2c60ab5, 0x3002ad6, 0x2c406d2, 0x3006765, 0x2c60ea5, 0x2c40e4a, 0x2fe5656, 0x2c60c9b,
|
|
34
34
|
/*2030*/ 0x2c4055a, 0x300356d, 0x2c60b69, 0x300bf52, 0x2c40752, 0x2c40b25, 0x3016b0b, 0x2c40a4b, 0x2c404ab, 0x30052bb,
|
|
35
35
|
/*2040*/ 0x2c6056d, 0x2c60b69, 0x3002daa, 0x2c40d92, 0x3007ea5, 0x2c40d25, 0x2c40a4d, 0x3015a4d, 0x2c402b6, 0x2c605b5,
|
|
36
|
+
/*2050*/ 0x00136d1 /* 11월 18일 까지라 데이터 부족 */,
|
|
36
37
|
];
|
|
37
38
|
var gan = ["갑", "을", "병", "정", "무", "기", "경", "신", "임", "계"];
|
|
38
39
|
var ji = ["자", "축", "인", "묘", "진", "사", "오", "미", "신", "유", "술", "해"];
|
|
@@ -40,9 +41,9 @@ var BASE_YEAR$1 = 1890;
|
|
|
40
41
|
var BASE_MONTH$1 = 1;
|
|
41
42
|
var BASE_DAY$1 = 1;
|
|
42
43
|
var BASE_VALUE$1 = BASE_YEAR$1 * 10000 + BASE_MONTH$1 * 100 + BASE_DAY$1;
|
|
43
|
-
var MAX_YEAR$1 =
|
|
44
|
-
var MAX_MONTH$1 =
|
|
45
|
-
var MAX_DAY$1 =
|
|
44
|
+
var MAX_YEAR$1 = 2050;
|
|
45
|
+
var MAX_MONTH$1 = 11;
|
|
46
|
+
var MAX_DAY$1 = 18;
|
|
46
47
|
var MAX_VALUE$1 = MAX_YEAR$1 * 10000 + MAX_MONTH$1 * 100 + MAX_DAY$1;
|
|
47
48
|
var SMALL_MONTH_DAY = 29;
|
|
48
49
|
var BIG_MONTH_DAY = 30;
|
|
@@ -53,7 +54,7 @@ var getYearData = function (year) {
|
|
|
53
54
|
};
|
|
54
55
|
/**
|
|
55
56
|
* 해당 월 (평달)의 일 수를 반환합니다.
|
|
56
|
-
* @param year 1890년 ~
|
|
57
|
+
* @param year 1890년 ~ 2050년
|
|
57
58
|
* @param month 1월 ~ 12월
|
|
58
59
|
* @returns 월의 일 수 (29 또는 30)
|
|
59
60
|
*/
|
|
@@ -64,7 +65,7 @@ var getMonthDays$1 = function (year, month) {
|
|
|
64
65
|
};
|
|
65
66
|
/**
|
|
66
67
|
* 해당 연도의 윤달을 반환합니다.
|
|
67
|
-
* @param year 1890년 ~
|
|
68
|
+
* @param year 1890년 ~ 2050년
|
|
68
69
|
* @returns 윤달 월 (1월 ~ 12월), 없으면 0
|
|
69
70
|
*/
|
|
70
71
|
var getLeapMonth = function (year) {
|
|
@@ -72,7 +73,7 @@ var getLeapMonth = function (year) {
|
|
|
72
73
|
};
|
|
73
74
|
/**
|
|
74
75
|
* 해당 연도에 윤달이 있는지를 반환합니다.
|
|
75
|
-
* @param year 1890년 ~
|
|
76
|
+
* @param year 1890년 ~ 2050년
|
|
76
77
|
* @return 윤달이 있으면 true
|
|
77
78
|
*/
|
|
78
79
|
var hasLeapMonth = function (year) {
|
|
@@ -80,7 +81,7 @@ var hasLeapMonth = function (year) {
|
|
|
80
81
|
};
|
|
81
82
|
/**
|
|
82
83
|
* 해당 월이 윤달인지를 반환합니다.
|
|
83
|
-
* @param year 1890년 ~
|
|
84
|
+
* @param year 1890년 ~ 2050년
|
|
84
85
|
* @param month 1월 ~ 12월
|
|
85
86
|
* @returns 윤달이면 true
|
|
86
87
|
*/
|
|
@@ -90,7 +91,7 @@ var isLeapMonth = function (year, month) {
|
|
|
90
91
|
};
|
|
91
92
|
/**
|
|
92
93
|
* 해당 월 (윤달)의 일 수를 반환합니다.
|
|
93
|
-
* @param year 1890년 ~
|
|
94
|
+
* @param year 1890년 ~ 2050년
|
|
94
95
|
* @param month 1월 ~ 12월
|
|
95
96
|
* @returns 윤달의 일 수 (29 또는 30), 윤달이 아니면 0
|
|
96
97
|
*/
|
|
@@ -102,7 +103,7 @@ var getLeapMonthDays = function (year, month) {
|
|
|
102
103
|
};
|
|
103
104
|
/**
|
|
104
105
|
* 해당 연도의 총 일 수를 반환합니다.
|
|
105
|
-
* @param year 1890년 ~
|
|
106
|
+
* @param year 1890년 ~ 2050년
|
|
106
107
|
* @return 해당 연도의 총 일 수
|
|
107
108
|
*/
|
|
108
109
|
var getYearDays$1 = function (year) {
|
|
@@ -118,7 +119,7 @@ for (var y$1 = BASE_YEAR$1 + 1; y$1 <= MAX_YEAR$1; y$1++) {
|
|
|
118
119
|
}
|
|
119
120
|
/**
|
|
120
121
|
* 1890년부터 해당 연도 전까지의 누적 일 수를 반환합니다.
|
|
121
|
-
* @param year 1890년 ~
|
|
122
|
+
* @param year 1890년 ~ 2050년
|
|
122
123
|
* @return 해당 연도 전까지의 누적 일 수
|
|
123
124
|
*/
|
|
124
125
|
var getTotalDaysBeforeYear$1 = function (year) {
|
|
@@ -128,7 +129,7 @@ var getTotalDaysBeforeYear$1 = function (year) {
|
|
|
128
129
|
};
|
|
129
130
|
/**
|
|
130
131
|
* 해당 연도 내에서 해당 월 (및 윤달 포함) 전까지의 누적 일 수를 반환합니다.
|
|
131
|
-
* @param year 1890년 ~
|
|
132
|
+
* @param year 1890년 ~ 2050년
|
|
132
133
|
* @param month 1월 ~ 12월
|
|
133
134
|
* @param isLeapMonth 대상이 윤달이면 true
|
|
134
135
|
* @returns 해당 연도 내, 해당 월 전까지의 누적 일 수
|
|
@@ -152,7 +153,7 @@ var getTotalDaysBeforeMonth$1 = function (year, month, isLeapMonth) {
|
|
|
152
153
|
};
|
|
153
154
|
/**
|
|
154
155
|
* 1890년부터 해당 연도, 월, 일 (및 윤달 포함) 까지의 누적 일 수를 반환합니다.
|
|
155
|
-
* @param year 1890년 ~
|
|
156
|
+
* @param year 1890년 ~ 2050년
|
|
156
157
|
* @param month 1월 ~ 12월
|
|
157
158
|
* @param day 일자
|
|
158
159
|
* @param isLeapMonth 대상이 윤달이면 true
|
|
@@ -227,8 +228,46 @@ var isValidDate$1 = function (year, month, day, isLeapMonth) {
|
|
|
227
228
|
var endDay = isLeapMonth ? getLeapMonthDays(year, month) : getMonthDays$1(year, month);
|
|
228
229
|
return day <= endDay;
|
|
229
230
|
};
|
|
231
|
+
/**
|
|
232
|
+
* 해당 월의 0-based 연속적인 월 인덱스를 반환합니다.
|
|
233
|
+
* @param year 1890년 ~ 2050년
|
|
234
|
+
* @param month 1월 ~ 12월
|
|
235
|
+
* @param isLeapMonth 대상이 윤달이면 true
|
|
236
|
+
* @returns 윤달이 있는 해는 0~12 (13개월), 없는 해는 0~11 (12개월)
|
|
237
|
+
*/
|
|
238
|
+
var getMonthIndex = function (year, month, isLeapMonth) {
|
|
239
|
+
month = toInt(month);
|
|
240
|
+
var index = month;
|
|
241
|
+
if (hasLeapMonth(year)) {
|
|
242
|
+
var leapMonth = getLeapMonth(year);
|
|
243
|
+
if ((isLeapMonth && month === leapMonth) || month > leapMonth) {
|
|
244
|
+
index++;
|
|
245
|
+
}
|
|
246
|
+
}
|
|
247
|
+
return index - 1;
|
|
248
|
+
};
|
|
249
|
+
/**
|
|
250
|
+
* 0-based 연속적인 월 인덱스에 해당하는 월과 윤달 여부를 반환합니다.
|
|
251
|
+
* @param year 1890년 ~ 2050년
|
|
252
|
+
* @param monthIndex 윤달이 있는 해는 0~12 (13개월), 없는 해는 0~11 (12개월)
|
|
253
|
+
* @returns month (1~12)와 isLeapMonth 여부
|
|
254
|
+
*/
|
|
255
|
+
var getMonthFromIndex = function (year, monthIndex) {
|
|
256
|
+
var leapMonth = getLeapMonth(year);
|
|
257
|
+
var isLeapMonth = false;
|
|
258
|
+
var index = monthIndex;
|
|
259
|
+
if (leapMonth > 0) {
|
|
260
|
+
if (index === leapMonth) {
|
|
261
|
+
isLeapMonth = true;
|
|
262
|
+
}
|
|
263
|
+
if (index >= leapMonth) {
|
|
264
|
+
index--;
|
|
265
|
+
}
|
|
266
|
+
}
|
|
267
|
+
return { month: index + 1, isLeapMonth: isLeapMonth };
|
|
268
|
+
};
|
|
230
269
|
|
|
231
|
-
var
|
|
270
|
+
var LunarTable = /*#__PURE__*/Object.freeze({
|
|
232
271
|
__proto__: null,
|
|
233
272
|
BASE_YEAR: BASE_YEAR$1,
|
|
234
273
|
BASE_MONTH: BASE_MONTH$1,
|
|
@@ -252,7 +291,9 @@ var LunarData = /*#__PURE__*/Object.freeze({
|
|
|
252
291
|
getIljinByJulianDay: getIljinByJulianDay,
|
|
253
292
|
getIljin: getIljin,
|
|
254
293
|
isDateInRange: isDateInRange$1,
|
|
255
|
-
isValidDate: isValidDate$1
|
|
294
|
+
isValidDate: isValidDate$1,
|
|
295
|
+
getMonthIndex: getMonthIndex,
|
|
296
|
+
getMonthFromIndex: getMonthFromIndex
|
|
256
297
|
});
|
|
257
298
|
|
|
258
299
|
var MONTH_DAYS = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];
|
|
@@ -264,8 +305,8 @@ var BASE_MONTH = 1;
|
|
|
264
305
|
var BASE_DAY = 21;
|
|
265
306
|
var BASE_VALUE = BASE_YEAR * 10000 + BASE_MONTH * 100 + BASE_DAY;
|
|
266
307
|
var MAX_YEAR = 2050;
|
|
267
|
-
var MAX_MONTH =
|
|
268
|
-
var MAX_DAY =
|
|
308
|
+
var MAX_MONTH = 12;
|
|
309
|
+
var MAX_DAY = 31;
|
|
269
310
|
var MAX_VALUE = MAX_YEAR * 10000 + MAX_MONTH * 100 + MAX_DAY;
|
|
270
311
|
var totalDaysBeforeYear = {};
|
|
271
312
|
var isLeapYear = function (year) {
|
|
@@ -347,7 +388,7 @@ var isValidDate = function (year, month, day) {
|
|
|
347
388
|
return day <= endDay;
|
|
348
389
|
};
|
|
349
390
|
|
|
350
|
-
var
|
|
391
|
+
var SolarTable = /*#__PURE__*/Object.freeze({
|
|
351
392
|
__proto__: null,
|
|
352
393
|
BASE_YEAR: BASE_YEAR,
|
|
353
394
|
BASE_MONTH: BASE_MONTH,
|
|
@@ -371,7 +412,7 @@ var SOLAR_LUNAR_DAY_DIFF = 20;
|
|
|
371
412
|
var JULIAN_DAY_DIFF = 2411389;
|
|
372
413
|
/**
|
|
373
414
|
* 양력을 음력으로 변환합니다.
|
|
374
|
-
* 양력 지원 날짜 범위: 1890년 1월 21일 ~ 2050년
|
|
415
|
+
* 양력 지원 날짜 범위: 1890년 1월 21일 ~ 2050년 12월 31일
|
|
375
416
|
* @param solYear 양력 연도
|
|
376
417
|
* @param solMonth 양력 월
|
|
377
418
|
* @param solDay 양력 일
|
|
@@ -384,36 +425,32 @@ var toLunar = function (solYear, solMonth, solDay) {
|
|
|
384
425
|
if (!isDateInRange(solYear, solMonth, solDay)) {
|
|
385
426
|
throw new RangeError("\uC9C0\uC6D0\uB418\uC9C0 \uC54A\uB294 \uB0A0\uC9DC\uC785\uB2C8\uB2E4. \uC785\uB825\uD55C \uB0A0\uC9DC: ".concat(solYear, "-").concat(solMonth, "-").concat(solDay));
|
|
386
427
|
}
|
|
387
|
-
var year =
|
|
388
|
-
var month =
|
|
389
|
-
var day =
|
|
390
|
-
var
|
|
391
|
-
var
|
|
392
|
-
var
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
var
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
day -= monthDays;
|
|
403
|
-
isLeapMonth = false;
|
|
404
|
-
if (month === leapMonth) {
|
|
405
|
-
leapMonth = 0;
|
|
406
|
-
monthDays = getLeapMonthDays(year, month);
|
|
407
|
-
isLeapMonth = true;
|
|
408
|
-
continue;
|
|
428
|
+
var year = Math.min(solYear, MAX_YEAR$1);
|
|
429
|
+
var month = solYear > MAX_YEAR$1 ? MAX_MONTH$1 : solMonth;
|
|
430
|
+
var day = 1;
|
|
431
|
+
var lunTotalDays = getTotalDays$1(year, month, day, true);
|
|
432
|
+
var solTotalDays = getTotalDays(solYear, solMonth, solDay);
|
|
433
|
+
var diffDays = solTotalDays - SOLAR_LUNAR_DAY_DIFF - lunTotalDays;
|
|
434
|
+
day += diffDays;
|
|
435
|
+
var day2 = solTotalDays - SOLAR_LUNAR_DAY_DIFF;
|
|
436
|
+
var julianDay = JULIAN_DAY_DIFF + day2 - 1;
|
|
437
|
+
var dayOfWeek = (day2 + 1) % 7;
|
|
438
|
+
var isLeapMonth = month === getLeapMonth(year);
|
|
439
|
+
var monthDays;
|
|
440
|
+
while (day < 1) {
|
|
441
|
+
if (isLeapMonth) {
|
|
442
|
+
isLeapMonth = false;
|
|
409
443
|
}
|
|
410
|
-
|
|
411
|
-
|
|
412
|
-
month
|
|
413
|
-
|
|
414
|
-
|
|
444
|
+
else {
|
|
445
|
+
month--;
|
|
446
|
+
if (month === 0) {
|
|
447
|
+
month = 12;
|
|
448
|
+
year--;
|
|
449
|
+
}
|
|
450
|
+
isLeapMonth = month === getLeapMonth(year);
|
|
415
451
|
}
|
|
416
|
-
monthDays = getMonthDays$1(year, month);
|
|
452
|
+
monthDays = isLeapMonth ? getLeapMonthDays(year, month) : getMonthDays$1(year, month);
|
|
453
|
+
day += monthDays;
|
|
417
454
|
}
|
|
418
455
|
return {
|
|
419
456
|
year: year,
|
|
@@ -429,7 +466,7 @@ var toLunar = function (solYear, solMonth, solDay) {
|
|
|
429
466
|
};
|
|
430
467
|
/**
|
|
431
468
|
* 음력을 양력으로 변환합니다.
|
|
432
|
-
* 음력 지원 날짜 범위: 1890년 1월 1일 ~
|
|
469
|
+
* 음력 지원 날짜 범위: 1890년 1월 1일 ~ 2050년 11월 18일
|
|
433
470
|
* @param lunYear 음력 연도
|
|
434
471
|
* @param lunMonth 음력 월
|
|
435
472
|
* @param lunDay 음력 일
|
|
@@ -443,15 +480,12 @@ var toSolar = function (lunYear, lunMonth, lunDay, isLeapMonth) {
|
|
|
443
480
|
if (!isDateInRange$1(lunYear, lunMonth, lunDay)) {
|
|
444
481
|
throw new RangeError("\uC9C0\uC6D0\uB418\uC9C0 \uC54A\uB294 \uB0A0\uC9DC\uC785\uB2C8\uB2E4. \uC785\uB825\uD55C \uB0A0\uC9DC: ".concat(lunYear, "-").concat(lunMonth, "-").concat(lunDay));
|
|
445
482
|
}
|
|
446
|
-
var
|
|
447
|
-
var
|
|
448
|
-
var
|
|
449
|
-
var
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
year++;
|
|
453
|
-
yearDays = getYearDays(year);
|
|
454
|
-
}
|
|
483
|
+
var lunTotalDays = getTotalDays$1(lunYear, lunMonth, lunDay, isLeapMonth);
|
|
484
|
+
var solTotalDays = getTotalDays(lunYear, lunMonth, lunDay);
|
|
485
|
+
var diffDays = lunTotalDays - (solTotalDays - SOLAR_LUNAR_DAY_DIFF);
|
|
486
|
+
var year = lunYear;
|
|
487
|
+
var month = lunMonth;
|
|
488
|
+
var day = lunDay + diffDays;
|
|
455
489
|
var monthDays = getMonthDays(year, month);
|
|
456
490
|
while (day > monthDays) {
|
|
457
491
|
day -= monthDays;
|
|
@@ -464,8 +498,12 @@ var toSolar = function (lunYear, lunMonth, lunDay, isLeapMonth) {
|
|
|
464
498
|
}
|
|
465
499
|
return { year: year, month: month, day: day };
|
|
466
500
|
};
|
|
501
|
+
/** @deprecated `LunarData`는 `LunarTable`로 이름이 변경되었습니다. */
|
|
502
|
+
var LunarData = LunarTable;
|
|
503
|
+
/** @deprecated `SolarData`는 `SolarTable`로 이름이 변경되었습니다. */
|
|
504
|
+
var SolarData = SolarTable;
|
|
467
505
|
|
|
468
|
-
var korLunar = { toLunar: toLunar, toSolar: toSolar, LunarData: LunarData, SolarData: SolarData };
|
|
506
|
+
var korLunar = { toLunar: toLunar, toSolar: toSolar, LunarTable: LunarTable, SolarTable: SolarTable, LunarData: LunarData, SolarData: SolarData };
|
|
469
507
|
|
|
470
|
-
export { LunarData, SolarData, korLunar as default, toLunar, toSolar };
|
|
508
|
+
export { LunarData, LunarTable, SolarData, SolarTable, korLunar as default, toLunar, toSolar };
|
|
471
509
|
//# sourceMappingURL=kor-lunar.esm.js.map
|
|
@@ -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
|
@@ -37,6 +37,7 @@ var LUN_TABLE = [
|
|
|
37
37
|
/*2020*/ 0x3004a9d, 0x2c40556, 0x2c60ab5, 0x3002ad6, 0x2c406d2, 0x3006765, 0x2c60ea5, 0x2c40e4a, 0x2fe5656, 0x2c60c9b,
|
|
38
38
|
/*2030*/ 0x2c4055a, 0x300356d, 0x2c60b69, 0x300bf52, 0x2c40752, 0x2c40b25, 0x3016b0b, 0x2c40a4b, 0x2c404ab, 0x30052bb,
|
|
39
39
|
/*2040*/ 0x2c6056d, 0x2c60b69, 0x3002daa, 0x2c40d92, 0x3007ea5, 0x2c40d25, 0x2c40a4d, 0x3015a4d, 0x2c402b6, 0x2c605b5,
|
|
40
|
+
/*2050*/ 0x00136d1 /* 11월 18일 까지라 데이터 부족 */,
|
|
40
41
|
];
|
|
41
42
|
var gan = ["갑", "을", "병", "정", "무", "기", "경", "신", "임", "계"];
|
|
42
43
|
var ji = ["자", "축", "인", "묘", "진", "사", "오", "미", "신", "유", "술", "해"];
|
|
@@ -44,9 +45,9 @@ var BASE_YEAR$1 = 1890;
|
|
|
44
45
|
var BASE_MONTH$1 = 1;
|
|
45
46
|
var BASE_DAY$1 = 1;
|
|
46
47
|
var BASE_VALUE$1 = BASE_YEAR$1 * 10000 + BASE_MONTH$1 * 100 + BASE_DAY$1;
|
|
47
|
-
var MAX_YEAR$1 =
|
|
48
|
-
var MAX_MONTH$1 =
|
|
49
|
-
var MAX_DAY$1 =
|
|
48
|
+
var MAX_YEAR$1 = 2050;
|
|
49
|
+
var MAX_MONTH$1 = 11;
|
|
50
|
+
var MAX_DAY$1 = 18;
|
|
50
51
|
var MAX_VALUE$1 = MAX_YEAR$1 * 10000 + MAX_MONTH$1 * 100 + MAX_DAY$1;
|
|
51
52
|
var SMALL_MONTH_DAY = 29;
|
|
52
53
|
var BIG_MONTH_DAY = 30;
|
|
@@ -57,7 +58,7 @@ var getYearData = function (year) {
|
|
|
57
58
|
};
|
|
58
59
|
/**
|
|
59
60
|
* 해당 월 (평달)의 일 수를 반환합니다.
|
|
60
|
-
* @param year 1890년 ~
|
|
61
|
+
* @param year 1890년 ~ 2050년
|
|
61
62
|
* @param month 1월 ~ 12월
|
|
62
63
|
* @returns 월의 일 수 (29 또는 30)
|
|
63
64
|
*/
|
|
@@ -68,7 +69,7 @@ var getMonthDays$1 = function (year, month) {
|
|
|
68
69
|
};
|
|
69
70
|
/**
|
|
70
71
|
* 해당 연도의 윤달을 반환합니다.
|
|
71
|
-
* @param year 1890년 ~
|
|
72
|
+
* @param year 1890년 ~ 2050년
|
|
72
73
|
* @returns 윤달 월 (1월 ~ 12월), 없으면 0
|
|
73
74
|
*/
|
|
74
75
|
var getLeapMonth = function (year) {
|
|
@@ -76,7 +77,7 @@ var getLeapMonth = function (year) {
|
|
|
76
77
|
};
|
|
77
78
|
/**
|
|
78
79
|
* 해당 연도에 윤달이 있는지를 반환합니다.
|
|
79
|
-
* @param year 1890년 ~
|
|
80
|
+
* @param year 1890년 ~ 2050년
|
|
80
81
|
* @return 윤달이 있으면 true
|
|
81
82
|
*/
|
|
82
83
|
var hasLeapMonth = function (year) {
|
|
@@ -84,7 +85,7 @@ var hasLeapMonth = function (year) {
|
|
|
84
85
|
};
|
|
85
86
|
/**
|
|
86
87
|
* 해당 월이 윤달인지를 반환합니다.
|
|
87
|
-
* @param year 1890년 ~
|
|
88
|
+
* @param year 1890년 ~ 2050년
|
|
88
89
|
* @param month 1월 ~ 12월
|
|
89
90
|
* @returns 윤달이면 true
|
|
90
91
|
*/
|
|
@@ -94,7 +95,7 @@ var isLeapMonth = function (year, month) {
|
|
|
94
95
|
};
|
|
95
96
|
/**
|
|
96
97
|
* 해당 월 (윤달)의 일 수를 반환합니다.
|
|
97
|
-
* @param year 1890년 ~
|
|
98
|
+
* @param year 1890년 ~ 2050년
|
|
98
99
|
* @param month 1월 ~ 12월
|
|
99
100
|
* @returns 윤달의 일 수 (29 또는 30), 윤달이 아니면 0
|
|
100
101
|
*/
|
|
@@ -106,7 +107,7 @@ var getLeapMonthDays = function (year, month) {
|
|
|
106
107
|
};
|
|
107
108
|
/**
|
|
108
109
|
* 해당 연도의 총 일 수를 반환합니다.
|
|
109
|
-
* @param year 1890년 ~
|
|
110
|
+
* @param year 1890년 ~ 2050년
|
|
110
111
|
* @return 해당 연도의 총 일 수
|
|
111
112
|
*/
|
|
112
113
|
var getYearDays$1 = function (year) {
|
|
@@ -122,7 +123,7 @@ for (var y$1 = BASE_YEAR$1 + 1; y$1 <= MAX_YEAR$1; y$1++) {
|
|
|
122
123
|
}
|
|
123
124
|
/**
|
|
124
125
|
* 1890년부터 해당 연도 전까지의 누적 일 수를 반환합니다.
|
|
125
|
-
* @param year 1890년 ~
|
|
126
|
+
* @param year 1890년 ~ 2050년
|
|
126
127
|
* @return 해당 연도 전까지의 누적 일 수
|
|
127
128
|
*/
|
|
128
129
|
var getTotalDaysBeforeYear$1 = function (year) {
|
|
@@ -132,7 +133,7 @@ var getTotalDaysBeforeYear$1 = function (year) {
|
|
|
132
133
|
};
|
|
133
134
|
/**
|
|
134
135
|
* 해당 연도 내에서 해당 월 (및 윤달 포함) 전까지의 누적 일 수를 반환합니다.
|
|
135
|
-
* @param year 1890년 ~
|
|
136
|
+
* @param year 1890년 ~ 2050년
|
|
136
137
|
* @param month 1월 ~ 12월
|
|
137
138
|
* @param isLeapMonth 대상이 윤달이면 true
|
|
138
139
|
* @returns 해당 연도 내, 해당 월 전까지의 누적 일 수
|
|
@@ -156,7 +157,7 @@ var getTotalDaysBeforeMonth$1 = function (year, month, isLeapMonth) {
|
|
|
156
157
|
};
|
|
157
158
|
/**
|
|
158
159
|
* 1890년부터 해당 연도, 월, 일 (및 윤달 포함) 까지의 누적 일 수를 반환합니다.
|
|
159
|
-
* @param year 1890년 ~
|
|
160
|
+
* @param year 1890년 ~ 2050년
|
|
160
161
|
* @param month 1월 ~ 12월
|
|
161
162
|
* @param day 일자
|
|
162
163
|
* @param isLeapMonth 대상이 윤달이면 true
|
|
@@ -231,8 +232,46 @@ var isValidDate$1 = function (year, month, day, isLeapMonth) {
|
|
|
231
232
|
var endDay = isLeapMonth ? getLeapMonthDays(year, month) : getMonthDays$1(year, month);
|
|
232
233
|
return day <= endDay;
|
|
233
234
|
};
|
|
235
|
+
/**
|
|
236
|
+
* 해당 월의 0-based 연속적인 월 인덱스를 반환합니다.
|
|
237
|
+
* @param year 1890년 ~ 2050년
|
|
238
|
+
* @param month 1월 ~ 12월
|
|
239
|
+
* @param isLeapMonth 대상이 윤달이면 true
|
|
240
|
+
* @returns 윤달이 있는 해는 0~12 (13개월), 없는 해는 0~11 (12개월)
|
|
241
|
+
*/
|
|
242
|
+
var getMonthIndex = function (year, month, isLeapMonth) {
|
|
243
|
+
month = toInt(month);
|
|
244
|
+
var index = month;
|
|
245
|
+
if (hasLeapMonth(year)) {
|
|
246
|
+
var leapMonth = getLeapMonth(year);
|
|
247
|
+
if ((isLeapMonth && month === leapMonth) || month > leapMonth) {
|
|
248
|
+
index++;
|
|
249
|
+
}
|
|
250
|
+
}
|
|
251
|
+
return index - 1;
|
|
252
|
+
};
|
|
253
|
+
/**
|
|
254
|
+
* 0-based 연속적인 월 인덱스에 해당하는 월과 윤달 여부를 반환합니다.
|
|
255
|
+
* @param year 1890년 ~ 2050년
|
|
256
|
+
* @param monthIndex 윤달이 있는 해는 0~12 (13개월), 없는 해는 0~11 (12개월)
|
|
257
|
+
* @returns month (1~12)와 isLeapMonth 여부
|
|
258
|
+
*/
|
|
259
|
+
var getMonthFromIndex = function (year, monthIndex) {
|
|
260
|
+
var leapMonth = getLeapMonth(year);
|
|
261
|
+
var isLeapMonth = false;
|
|
262
|
+
var index = monthIndex;
|
|
263
|
+
if (leapMonth > 0) {
|
|
264
|
+
if (index === leapMonth) {
|
|
265
|
+
isLeapMonth = true;
|
|
266
|
+
}
|
|
267
|
+
if (index >= leapMonth) {
|
|
268
|
+
index--;
|
|
269
|
+
}
|
|
270
|
+
}
|
|
271
|
+
return { month: index + 1, isLeapMonth: isLeapMonth };
|
|
272
|
+
};
|
|
234
273
|
|
|
235
|
-
var
|
|
274
|
+
var LunarTable = /*#__PURE__*/Object.freeze({
|
|
236
275
|
__proto__: null,
|
|
237
276
|
BASE_YEAR: BASE_YEAR$1,
|
|
238
277
|
BASE_MONTH: BASE_MONTH$1,
|
|
@@ -256,7 +295,9 @@ var LunarData = /*#__PURE__*/Object.freeze({
|
|
|
256
295
|
getIljinByJulianDay: getIljinByJulianDay,
|
|
257
296
|
getIljin: getIljin,
|
|
258
297
|
isDateInRange: isDateInRange$1,
|
|
259
|
-
isValidDate: isValidDate$1
|
|
298
|
+
isValidDate: isValidDate$1,
|
|
299
|
+
getMonthIndex: getMonthIndex,
|
|
300
|
+
getMonthFromIndex: getMonthFromIndex
|
|
260
301
|
});
|
|
261
302
|
|
|
262
303
|
var MONTH_DAYS = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];
|
|
@@ -268,8 +309,8 @@ var BASE_MONTH = 1;
|
|
|
268
309
|
var BASE_DAY = 21;
|
|
269
310
|
var BASE_VALUE = BASE_YEAR * 10000 + BASE_MONTH * 100 + BASE_DAY;
|
|
270
311
|
var MAX_YEAR = 2050;
|
|
271
|
-
var MAX_MONTH =
|
|
272
|
-
var MAX_DAY =
|
|
312
|
+
var MAX_MONTH = 12;
|
|
313
|
+
var MAX_DAY = 31;
|
|
273
314
|
var MAX_VALUE = MAX_YEAR * 10000 + MAX_MONTH * 100 + MAX_DAY;
|
|
274
315
|
var totalDaysBeforeYear = {};
|
|
275
316
|
var isLeapYear = function (year) {
|
|
@@ -351,7 +392,7 @@ var isValidDate = function (year, month, day) {
|
|
|
351
392
|
return day <= endDay;
|
|
352
393
|
};
|
|
353
394
|
|
|
354
|
-
var
|
|
395
|
+
var SolarTable = /*#__PURE__*/Object.freeze({
|
|
355
396
|
__proto__: null,
|
|
356
397
|
BASE_YEAR: BASE_YEAR,
|
|
357
398
|
BASE_MONTH: BASE_MONTH,
|
|
@@ -375,7 +416,7 @@ var SOLAR_LUNAR_DAY_DIFF = 20;
|
|
|
375
416
|
var JULIAN_DAY_DIFF = 2411389;
|
|
376
417
|
/**
|
|
377
418
|
* 양력을 음력으로 변환합니다.
|
|
378
|
-
* 양력 지원 날짜 범위: 1890년 1월 21일 ~ 2050년
|
|
419
|
+
* 양력 지원 날짜 범위: 1890년 1월 21일 ~ 2050년 12월 31일
|
|
379
420
|
* @param solYear 양력 연도
|
|
380
421
|
* @param solMonth 양력 월
|
|
381
422
|
* @param solDay 양력 일
|
|
@@ -388,36 +429,32 @@ var toLunar = function (solYear, solMonth, solDay) {
|
|
|
388
429
|
if (!isDateInRange(solYear, solMonth, solDay)) {
|
|
389
430
|
throw new RangeError("\uC9C0\uC6D0\uB418\uC9C0 \uC54A\uB294 \uB0A0\uC9DC\uC785\uB2C8\uB2E4. \uC785\uB825\uD55C \uB0A0\uC9DC: ".concat(solYear, "-").concat(solMonth, "-").concat(solDay));
|
|
390
431
|
}
|
|
391
|
-
var year =
|
|
392
|
-
var month =
|
|
393
|
-
var day =
|
|
394
|
-
var
|
|
395
|
-
var
|
|
396
|
-
var
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
var
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
day -= monthDays;
|
|
407
|
-
isLeapMonth = false;
|
|
408
|
-
if (month === leapMonth) {
|
|
409
|
-
leapMonth = 0;
|
|
410
|
-
monthDays = getLeapMonthDays(year, month);
|
|
411
|
-
isLeapMonth = true;
|
|
412
|
-
continue;
|
|
432
|
+
var year = Math.min(solYear, MAX_YEAR$1);
|
|
433
|
+
var month = solYear > MAX_YEAR$1 ? MAX_MONTH$1 : solMonth;
|
|
434
|
+
var day = 1;
|
|
435
|
+
var lunTotalDays = getTotalDays$1(year, month, day, true);
|
|
436
|
+
var solTotalDays = getTotalDays(solYear, solMonth, solDay);
|
|
437
|
+
var diffDays = solTotalDays - SOLAR_LUNAR_DAY_DIFF - lunTotalDays;
|
|
438
|
+
day += diffDays;
|
|
439
|
+
var day2 = solTotalDays - SOLAR_LUNAR_DAY_DIFF;
|
|
440
|
+
var julianDay = JULIAN_DAY_DIFF + day2 - 1;
|
|
441
|
+
var dayOfWeek = (day2 + 1) % 7;
|
|
442
|
+
var isLeapMonth = month === getLeapMonth(year);
|
|
443
|
+
var monthDays;
|
|
444
|
+
while (day < 1) {
|
|
445
|
+
if (isLeapMonth) {
|
|
446
|
+
isLeapMonth = false;
|
|
413
447
|
}
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
month
|
|
417
|
-
|
|
418
|
-
|
|
448
|
+
else {
|
|
449
|
+
month--;
|
|
450
|
+
if (month === 0) {
|
|
451
|
+
month = 12;
|
|
452
|
+
year--;
|
|
453
|
+
}
|
|
454
|
+
isLeapMonth = month === getLeapMonth(year);
|
|
419
455
|
}
|
|
420
|
-
monthDays = getMonthDays$1(year, month);
|
|
456
|
+
monthDays = isLeapMonth ? getLeapMonthDays(year, month) : getMonthDays$1(year, month);
|
|
457
|
+
day += monthDays;
|
|
421
458
|
}
|
|
422
459
|
return {
|
|
423
460
|
year: year,
|
|
@@ -433,7 +470,7 @@ var toLunar = function (solYear, solMonth, solDay) {
|
|
|
433
470
|
};
|
|
434
471
|
/**
|
|
435
472
|
* 음력을 양력으로 변환합니다.
|
|
436
|
-
* 음력 지원 날짜 범위: 1890년 1월 1일 ~
|
|
473
|
+
* 음력 지원 날짜 범위: 1890년 1월 1일 ~ 2050년 11월 18일
|
|
437
474
|
* @param lunYear 음력 연도
|
|
438
475
|
* @param lunMonth 음력 월
|
|
439
476
|
* @param lunDay 음력 일
|
|
@@ -447,15 +484,12 @@ var toSolar = function (lunYear, lunMonth, lunDay, isLeapMonth) {
|
|
|
447
484
|
if (!isDateInRange$1(lunYear, lunMonth, lunDay)) {
|
|
448
485
|
throw new RangeError("\uC9C0\uC6D0\uB418\uC9C0 \uC54A\uB294 \uB0A0\uC9DC\uC785\uB2C8\uB2E4. \uC785\uB825\uD55C \uB0A0\uC9DC: ".concat(lunYear, "-").concat(lunMonth, "-").concat(lunDay));
|
|
449
486
|
}
|
|
450
|
-
var
|
|
451
|
-
var
|
|
452
|
-
var
|
|
453
|
-
var
|
|
454
|
-
|
|
455
|
-
|
|
456
|
-
year++;
|
|
457
|
-
yearDays = getYearDays(year);
|
|
458
|
-
}
|
|
487
|
+
var lunTotalDays = getTotalDays$1(lunYear, lunMonth, lunDay, isLeapMonth);
|
|
488
|
+
var solTotalDays = getTotalDays(lunYear, lunMonth, lunDay);
|
|
489
|
+
var diffDays = lunTotalDays - (solTotalDays - SOLAR_LUNAR_DAY_DIFF);
|
|
490
|
+
var year = lunYear;
|
|
491
|
+
var month = lunMonth;
|
|
492
|
+
var day = lunDay + diffDays;
|
|
459
493
|
var monthDays = getMonthDays(year, month);
|
|
460
494
|
while (day > monthDays) {
|
|
461
495
|
day -= monthDays;
|
|
@@ -468,11 +502,17 @@ var toSolar = function (lunYear, lunMonth, lunDay, isLeapMonth) {
|
|
|
468
502
|
}
|
|
469
503
|
return { year: year, month: month, day: day };
|
|
470
504
|
};
|
|
505
|
+
/** @deprecated `LunarData`는 `LunarTable`로 이름이 변경되었습니다. */
|
|
506
|
+
var LunarData = LunarTable;
|
|
507
|
+
/** @deprecated `SolarData`는 `SolarTable`로 이름이 변경되었습니다. */
|
|
508
|
+
var SolarData = SolarTable;
|
|
471
509
|
|
|
472
|
-
var korLunar = { toLunar: toLunar, toSolar: toSolar, LunarData: LunarData, SolarData: SolarData };
|
|
510
|
+
var korLunar = { toLunar: toLunar, toSolar: toSolar, LunarTable: LunarTable, SolarTable: SolarTable, LunarData: LunarData, SolarData: SolarData };
|
|
473
511
|
|
|
474
512
|
exports.LunarData = LunarData;
|
|
513
|
+
exports.LunarTable = LunarTable;
|
|
475
514
|
exports.SolarData = SolarData;
|
|
515
|
+
exports.SolarTable = SolarTable;
|
|
476
516
|
exports["default"] = korLunar;
|
|
477
517
|
exports.toLunar = toLunar;
|
|
478
518
|
exports.toSolar = toSolar;
|
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(n){"use strict";var
|
|
1
|
+
var korLunar=function(n){"use strict";var t=function(n){return"string"==typeof n||"number"==typeof n?~~n: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],e=["갑","을","병","정","무","기","경","신","임","계"],a=["자","축","인","묘","진","사","오","미","신","유","술","해"],o=1890,u=18900101,i=2050,f=20501118,c={},l=function(n){return n=t(n),r[n-o]},g=function(n,r){return r=t(r),0===(l(n)>>r-1&1)?29:30},A=function(n){return l(n)>>12&15},h=function(n){return 0!==A(n)},M=function(n,r){return(r=t(r))===A(n)},_=function(n,t){return M(n,t)?0===(l(n)>>16&1)?29:30:0},s=function(n){return l(n)>>17&511};c[1890]=0;for(var D=1891;D<=i;D++)c[D]=c[D-1]+s(D-1);var y=function(n){return n=t(n),c[n]},v=function(n,r,e){r=t(r);for(var a=0,o=1;o<r;o++)a+=g(n,o),o===A(n)&&(a+=_(n,o));var u=A(n);return e&&u===r&&(a+=g(n,r)),a},E=function(n,r,e,a){return e=t(e),y(n)+v(n,r,a)+e},L=function(n){return n=t(n),e[(n+6)%e.length]+a[(n+8)%a.length]},S=function(n,r){return n=t(n),r=t(r),e[(2*n+r+3)%e.length]+a[(r+1)%a.length]},T=function(n){return n=t(n),e[(n-1)%e.length]+a[(n+1)%a.length]},B=function(n,r,e){var a=1e4*(n=t(n))+100*(r=t(r))+(e=t(e));return a>=u&&a<=f},Y=Object.freeze({__proto__:null,BASE_YEAR:o,BASE_MONTH:1,BASE_DAY:1,BASE_VALUE:u,MAX_YEAR:i,MAX_MONTH:11,MAX_DAY:18,MAX_VALUE:f,getMonthDays:g,getLeapMonth:A,hasLeapMonth:h,isLeapMonth:M,getLeapMonthDays:_,getYearDays:s,getTotalDaysBeforeYear:y,getTotalDaysBeforeMonth:v,getTotalDays:E,getSecha:L,getWolgeon:S,getIljinByJulianDay:T,getIljin:function(n,t,r,e){var a=E(n,t,r,e);return T(a-1)},isDateInRange:B,isValidDate:function(n,r,e,a){if(n=t(n),r=t(r),e=t(e),n<o||n>i)return!1;if(n===o){if(r<1)return!1;if(1===r&&e<1)return!1}if(n===i){if(r>11)return!1;if(11===r&&e>18)return!1}return!(r<1||r>12)&&(!(e<1)&&e<=(a?_(n,r):g(n,r)))},getMonthIndex:function(n,r,e){var a=r=t(r);if(h(n)){var o=A(n);(e&&r===o||r>o)&&a++}return a-1},getMonthFromIndex:function(n,t){var r=A(n),e=!1,a=t;return r>0&&(a===r&&(e=!0),a>=r&&a--),{month:a+1,isLeapMonth:e}}}),p=[31,28,31,30,31,30,31,31,30,31,30,31],d=1890,b=18900121,O=2050,R=20501231,X={},j=function(n){return(n=t(n))%4==0&&n%100!=0||n%400==0},m=function(n,r){return 2===(r=t(r))&&j(n)?29:p[r-1]},I=function(n){return j(n)?366:365};X[1890]=0;for(var V=1891;V<=O;V++)X[V]=X[V-1]+I(V-1);var w=function(n){return n=t(n),X[n]},H=function(n,t){for(var r=0,e=1;e<t;e++)r+=m(n,e);return r},N=function(n,t,r){return w(n)+H(n,t)+r},U=function(n,r,e){var a=1e4*(n=t(n))+100*(r=t(r))+(e=t(e));return a>=b&&a<=R},k=Object.freeze({__proto__:null,BASE_YEAR:d,BASE_MONTH:1,BASE_DAY:21,BASE_VALUE:b,MAX_YEAR:O,MAX_MONTH:12,MAX_DAY:31,MAX_VALUE:R,isLeapYear:j,getMonthDays:m,getYearDays:I,getTotalDaysBeforeYear:w,getTotalDaysBeforeMonth:H,getTotalDays:N,isDateInRange:U,isValidDate:function(n,r,e){if(n=t(n),r=t(r),e=t(e),n<d||n>O)return!1;if(n===d){if(r<1)return!1;if(1===r&&e<21)return!1}if(n===O){if(r>12)return!1;if(12===r&&e>31)return!1}return!(r<1||r>12)&&(!(e<1)&&e<=m(n,r))}}),x=function(n,r,e){if(n=t(n),r=t(r),e=t(e),!U(n,r,e))throw new RangeError("지원되지 않는 날짜입니다. 입력한 날짜: ".concat(n,"-").concat(r,"-").concat(e));var a=Math.min(n,i),o=n>i?11:r,u=1,f=E(a,o,u,!0),c=N(n,r,e);u+=c-20-f;for(var l=c-20,h=2411389+l-1,M=(l+1)%7,s=o===A(a);u<1;)s?s=!1:(0===--o&&(o=12,a--),s=o===A(a)),u+=s?_(a,o):g(a,o);return{year:a,month:o,day:u,isLeapMonth:s,secha:L(a),wolgeon:s?"":S(a,o),iljin:T(h),julianDay:h,dayOfWeek:M}},z=function(n,r,e,a){if(n=t(n),r=t(r),e=t(e),!B(n,r,e))throw new RangeError("지원되지 않는 날짜입니다. 입력한 날짜: ".concat(n,"-").concat(r,"-").concat(e));for(var o=n,u=r,i=e+(E(n,r,e,a)-(N(n,r,e)-20)),f=m(o,u);i>f;)i-=f,++u>12&&(u=1,o++),f=m(o,u);return{year:o,month:u,day:i}},W=Y,F=k,J={toLunar:x,toSolar:z,LunarTable:Y,SolarTable:k,LunarData:W,SolarData:F};return n.LunarData=W,n.LunarTable=Y,n.SolarData=F,n.SolarTable=k,n.default=J,n.toLunar=x,n.toSolar=z,Object.defineProperty(n,"__esModule",{value:!0}),n}({});
|
|
2
2
|
//# sourceMappingURL=kor-lunar.min.js.map
|
|
@@ -2,58 +2,58 @@ export declare const BASE_YEAR = 1890;
|
|
|
2
2
|
export declare const BASE_MONTH = 1;
|
|
3
3
|
export declare const BASE_DAY = 1;
|
|
4
4
|
export declare const BASE_VALUE: number;
|
|
5
|
-
export declare const MAX_YEAR =
|
|
6
|
-
export declare const MAX_MONTH =
|
|
7
|
-
export declare const MAX_DAY =
|
|
5
|
+
export declare const MAX_YEAR = 2050;
|
|
6
|
+
export declare const MAX_MONTH = 11;
|
|
7
|
+
export declare const MAX_DAY = 18;
|
|
8
8
|
export declare const MAX_VALUE: number;
|
|
9
9
|
/**
|
|
10
10
|
* 해당 월 (평달)의 일 수를 반환합니다.
|
|
11
|
-
* @param year 1890년 ~
|
|
11
|
+
* @param year 1890년 ~ 2050년
|
|
12
12
|
* @param month 1월 ~ 12월
|
|
13
13
|
* @returns 월의 일 수 (29 또는 30)
|
|
14
14
|
*/
|
|
15
15
|
export declare const getMonthDays: (year: number, month: number) => number;
|
|
16
16
|
/**
|
|
17
17
|
* 해당 연도의 윤달을 반환합니다.
|
|
18
|
-
* @param year 1890년 ~
|
|
18
|
+
* @param year 1890년 ~ 2050년
|
|
19
19
|
* @returns 윤달 월 (1월 ~ 12월), 없으면 0
|
|
20
20
|
*/
|
|
21
21
|
export declare const getLeapMonth: (year: number) => number;
|
|
22
22
|
/**
|
|
23
23
|
* 해당 연도에 윤달이 있는지를 반환합니다.
|
|
24
|
-
* @param year 1890년 ~
|
|
24
|
+
* @param year 1890년 ~ 2050년
|
|
25
25
|
* @return 윤달이 있으면 true
|
|
26
26
|
*/
|
|
27
27
|
export declare const hasLeapMonth: (year: number) => boolean;
|
|
28
28
|
/**
|
|
29
29
|
* 해당 월이 윤달인지를 반환합니다.
|
|
30
|
-
* @param year 1890년 ~
|
|
30
|
+
* @param year 1890년 ~ 2050년
|
|
31
31
|
* @param month 1월 ~ 12월
|
|
32
32
|
* @returns 윤달이면 true
|
|
33
33
|
*/
|
|
34
34
|
export declare const isLeapMonth: (year: number, month: number) => boolean;
|
|
35
35
|
/**
|
|
36
36
|
* 해당 월 (윤달)의 일 수를 반환합니다.
|
|
37
|
-
* @param year 1890년 ~
|
|
37
|
+
* @param year 1890년 ~ 2050년
|
|
38
38
|
* @param month 1월 ~ 12월
|
|
39
39
|
* @returns 윤달의 일 수 (29 또는 30), 윤달이 아니면 0
|
|
40
40
|
*/
|
|
41
41
|
export declare const getLeapMonthDays: (year: number, month: number) => number;
|
|
42
42
|
/**
|
|
43
43
|
* 해당 연도의 총 일 수를 반환합니다.
|
|
44
|
-
* @param year 1890년 ~
|
|
44
|
+
* @param year 1890년 ~ 2050년
|
|
45
45
|
* @return 해당 연도의 총 일 수
|
|
46
46
|
*/
|
|
47
47
|
export declare const getYearDays: (year: number) => number;
|
|
48
48
|
/**
|
|
49
49
|
* 1890년부터 해당 연도 전까지의 누적 일 수를 반환합니다.
|
|
50
|
-
* @param year 1890년 ~
|
|
50
|
+
* @param year 1890년 ~ 2050년
|
|
51
51
|
* @return 해당 연도 전까지의 누적 일 수
|
|
52
52
|
*/
|
|
53
53
|
export declare const getTotalDaysBeforeYear: (year: number) => number;
|
|
54
54
|
/**
|
|
55
55
|
* 해당 연도 내에서 해당 월 (및 윤달 포함) 전까지의 누적 일 수를 반환합니다.
|
|
56
|
-
* @param year 1890년 ~
|
|
56
|
+
* @param year 1890년 ~ 2050년
|
|
57
57
|
* @param month 1월 ~ 12월
|
|
58
58
|
* @param isLeapMonth 대상이 윤달이면 true
|
|
59
59
|
* @returns 해당 연도 내, 해당 월 전까지의 누적 일 수
|
|
@@ -61,7 +61,7 @@ export declare const getTotalDaysBeforeYear: (year: number) => number;
|
|
|
61
61
|
export declare const getTotalDaysBeforeMonth: (year: number, month: number, isLeapMonth: boolean) => number;
|
|
62
62
|
/**
|
|
63
63
|
* 1890년부터 해당 연도, 월, 일 (및 윤달 포함) 까지의 누적 일 수를 반환합니다.
|
|
64
|
-
* @param year 1890년 ~
|
|
64
|
+
* @param year 1890년 ~ 2050년
|
|
65
65
|
* @param month 1월 ~ 12월
|
|
66
66
|
* @param day 일자
|
|
67
67
|
* @param isLeapMonth 대상이 윤달이면 true
|
|
@@ -83,3 +83,21 @@ export declare const isDateInRange: (year: number, month: number, day: number) =
|
|
|
83
83
|
* @returns 유효한 날짜이면 true
|
|
84
84
|
*/
|
|
85
85
|
export declare const isValidDate: (year: number, month: number, day: number, isLeapMonth: boolean) => boolean;
|
|
86
|
+
/**
|
|
87
|
+
* 해당 월의 0-based 연속적인 월 인덱스를 반환합니다.
|
|
88
|
+
* @param year 1890년 ~ 2050년
|
|
89
|
+
* @param month 1월 ~ 12월
|
|
90
|
+
* @param isLeapMonth 대상이 윤달이면 true
|
|
91
|
+
* @returns 윤달이 있는 해는 0~12 (13개월), 없는 해는 0~11 (12개월)
|
|
92
|
+
*/
|
|
93
|
+
export declare const getMonthIndex: (year: number, month: number, isLeapMonth: boolean) => number;
|
|
94
|
+
/**
|
|
95
|
+
* 0-based 연속적인 월 인덱스에 해당하는 월과 윤달 여부를 반환합니다.
|
|
96
|
+
* @param year 1890년 ~ 2050년
|
|
97
|
+
* @param monthIndex 윤달이 있는 해는 0~12 (13개월), 없는 해는 0~11 (12개월)
|
|
98
|
+
* @returns month (1~12)와 isLeapMonth 여부
|
|
99
|
+
*/
|
|
100
|
+
export declare const getMonthFromIndex: (year: number, monthIndex: number) => {
|
|
101
|
+
month: number;
|
|
102
|
+
isLeapMonth: boolean;
|
|
103
|
+
};
|
|
@@ -3,8 +3,8 @@ export declare const BASE_MONTH = 1;
|
|
|
3
3
|
export declare const BASE_DAY = 21;
|
|
4
4
|
export declare const BASE_VALUE: number;
|
|
5
5
|
export declare const MAX_YEAR = 2050;
|
|
6
|
-
export declare const MAX_MONTH =
|
|
7
|
-
export declare const MAX_DAY =
|
|
6
|
+
export declare const MAX_MONTH = 12;
|
|
7
|
+
export declare const MAX_DAY = 31;
|
|
8
8
|
export declare const MAX_VALUE: number;
|
|
9
9
|
export declare const isLeapYear: (year: number) => boolean;
|
|
10
10
|
export declare const getMonthDays: (year: number, month: number) => number;
|