@gracefullight/saju 0.7.0 → 1.0.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.en.md +54 -43
- package/README.md +54 -43
- package/dist/__tests__/four-pillars.test.js +55 -37
- package/dist/__tests__/saju.test.js +19 -9
- package/dist/__tests__/solar-terms.test.js +12 -12
- package/dist/core/four-pillars.d.ts +12 -5
- package/dist/core/four-pillars.d.ts.map +1 -1
- package/dist/core/four-pillars.js +14 -11
- package/dist/core/luck.d.ts +2 -1
- package/dist/core/luck.d.ts.map +1 -1
- package/dist/core/luck.js +2 -2
- package/dist/core/solar-terms.d.ts +7 -2
- package/dist/core/solar-terms.d.ts.map +1 -1
- package/dist/core/solar-terms.js +2 -2
- package/dist/index.d.ts +3 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +7 -4
- package/package.json +1 -1
package/README.en.md
CHANGED
|
@@ -75,7 +75,8 @@ const birthDateTime = DateTime.fromObject(
|
|
|
75
75
|
);
|
|
76
76
|
|
|
77
77
|
// getSaju: Calculate pillars, ten gods, strength, relations, yongshen, solar terms, major luck, yearly luck all at once
|
|
78
|
-
const result = getSaju(
|
|
78
|
+
const result = getSaju(birthDateTime, {
|
|
79
|
+
adapter,
|
|
79
80
|
gender: "male", // Required: needed for major luck calculation
|
|
80
81
|
// longitudeDeg: 126.9778, // Optional: uses timezone-based longitude if omitted
|
|
81
82
|
// preset: STANDARD_PRESET, // Optional: defaults to STANDARD_PRESET
|
|
@@ -106,7 +107,7 @@ const birthDateTime = DateTime.fromObject(
|
|
|
106
107
|
{ zone: "Asia/Seoul" }
|
|
107
108
|
);
|
|
108
109
|
|
|
109
|
-
const result = getFourPillars(
|
|
110
|
+
const result = getFourPillars(birthDateTime, { adapter });
|
|
110
111
|
|
|
111
112
|
console.log(result);
|
|
112
113
|
```
|
|
@@ -128,13 +129,15 @@ const dt = DateTime.fromObject(
|
|
|
128
129
|
);
|
|
129
130
|
|
|
130
131
|
// Standard Preset: Midnight (00:00) day boundary, no solar time correction
|
|
131
|
-
const resultStandard = getFourPillars(
|
|
132
|
+
const resultStandard = getFourPillars(dt, {
|
|
133
|
+
adapter,
|
|
132
134
|
longitudeDeg: 126.9778,
|
|
133
135
|
preset: STANDARD_PRESET,
|
|
134
136
|
});
|
|
135
137
|
|
|
136
138
|
// Traditional Preset: Zi hour (23:00) day boundary, with solar time correction
|
|
137
|
-
const resultTraditional = getFourPillars(
|
|
139
|
+
const resultTraditional = getFourPillars(dt, {
|
|
140
|
+
adapter,
|
|
138
141
|
longitudeDeg: 126.9778,
|
|
139
142
|
preset: TRADITIONAL_PRESET,
|
|
140
143
|
});
|
|
@@ -153,7 +156,8 @@ const dt = {
|
|
|
153
156
|
timeZone: "Asia/Seoul",
|
|
154
157
|
};
|
|
155
158
|
|
|
156
|
-
const result = getFourPillars(
|
|
159
|
+
const result = getFourPillars(dt, {
|
|
160
|
+
adapter,
|
|
157
161
|
longitudeDeg: 126.9778,
|
|
158
162
|
preset: STANDARD_PRESET,
|
|
159
163
|
});
|
|
@@ -225,16 +229,16 @@ Traditional interpretation with Zi hour (23:00) day boundary and solar time corr
|
|
|
225
229
|
|
|
226
230
|
### Core Functions
|
|
227
231
|
|
|
228
|
-
#### `getSaju(
|
|
232
|
+
#### `getSaju(datetime, options)`
|
|
229
233
|
|
|
230
234
|
Calculate all saju analysis results (pillars, ten gods, strength, relations, yongshen, solar terms, major luck, yearly luck) at once.
|
|
231
235
|
|
|
232
236
|
```typescript
|
|
233
237
|
function getSaju<T>(
|
|
234
|
-
adapter: DateAdapter<T>,
|
|
235
238
|
dtLocal: T,
|
|
236
239
|
options: {
|
|
237
|
-
|
|
240
|
+
adapter: DateAdapter<T>;
|
|
241
|
+
longitudeDeg?: number;
|
|
238
242
|
gender: "male" | "female"; // Required
|
|
239
243
|
tzOffsetHours?: number;
|
|
240
244
|
preset?: typeof STANDARD_PRESET;
|
|
@@ -244,16 +248,16 @@ function getSaju<T>(
|
|
|
244
248
|
): SajuResult;
|
|
245
249
|
```
|
|
246
250
|
|
|
247
|
-
#### `getFourPillars(
|
|
251
|
+
#### `getFourPillars(datetime, options)`
|
|
248
252
|
|
|
249
253
|
Calculate all four pillars (year, month, day, hour).
|
|
250
254
|
|
|
251
255
|
```typescript
|
|
252
256
|
function getFourPillars<T>(
|
|
253
|
-
adapter: DateAdapter<T>,
|
|
254
257
|
datetime: T,
|
|
255
258
|
options: {
|
|
256
|
-
|
|
259
|
+
adapter: DateAdapter<T>;
|
|
260
|
+
longitudeDeg?: number;
|
|
257
261
|
preset?: {
|
|
258
262
|
dayBoundary: "midnight" | "zi23";
|
|
259
263
|
useMeanSolarTimeForHour: boolean;
|
|
@@ -282,23 +286,23 @@ function getFourPillars<T>(
|
|
|
282
286
|
```
|
|
283
287
|
|
|
284
288
|
**Parameters:**
|
|
285
|
-
- `adapter`: DateAdapter instance
|
|
286
289
|
- `datetime`: Date/time object in the adapter's format
|
|
287
290
|
- `options`:
|
|
288
|
-
- `
|
|
291
|
+
- `adapter`: DateAdapter instance
|
|
292
|
+
- `longitudeDeg`: Geographic longitude in degrees (e.g., Seoul: 126.9778), optional
|
|
289
293
|
- `preset`: Configuration preset (use `STANDARD_PRESET` or `TRADITIONAL_PRESET`)
|
|
290
294
|
- `tzOffsetHours`: Optional timezone offset in hours (default: 9 for KST)
|
|
291
295
|
|
|
292
296
|
**Returns:** Object with year, month, day, hour pillars, lunar date, and metadata
|
|
293
297
|
|
|
294
|
-
#### `yearPillar(
|
|
298
|
+
#### `yearPillar(datetime, options)`
|
|
295
299
|
|
|
296
300
|
Calculate only the year pillar based on Lichun (立春, Start of Spring).
|
|
297
301
|
|
|
298
302
|
```typescript
|
|
299
303
|
function yearPillar<T>(
|
|
300
|
-
|
|
301
|
-
|
|
304
|
+
datetime: T,
|
|
305
|
+
options: { adapter: DateAdapter<T> }
|
|
302
306
|
): {
|
|
303
307
|
idx60: number;
|
|
304
308
|
pillar: string;
|
|
@@ -306,14 +310,14 @@ function yearPillar<T>(
|
|
|
306
310
|
}
|
|
307
311
|
```
|
|
308
312
|
|
|
309
|
-
#### `monthPillar(
|
|
313
|
+
#### `monthPillar(datetime, options)`
|
|
310
314
|
|
|
311
315
|
Calculate only the month pillar based on solar longitude.
|
|
312
316
|
|
|
313
317
|
```typescript
|
|
314
318
|
function monthPillar<T>(
|
|
315
|
-
|
|
316
|
-
|
|
319
|
+
datetime: T,
|
|
320
|
+
options: { adapter: DateAdapter<T> }
|
|
317
321
|
): {
|
|
318
322
|
pillar: string;
|
|
319
323
|
sunLonDeg: number;
|
|
@@ -387,15 +391,15 @@ const solar = getSolarDate(1999, 11, 25, false);
|
|
|
387
391
|
// { year: 2000, month: 1, day: 1 }
|
|
388
392
|
```
|
|
389
393
|
|
|
390
|
-
#### `hourPillar(
|
|
394
|
+
#### `hourPillar(datetime, options)`
|
|
391
395
|
|
|
392
396
|
Calculate only the hour pillar with optional solar time correction.
|
|
393
397
|
|
|
394
398
|
```typescript
|
|
395
399
|
function hourPillar<T>(
|
|
396
|
-
adapter: DateAdapter<T>,
|
|
397
400
|
datetime: T,
|
|
398
|
-
options
|
|
401
|
+
options: {
|
|
402
|
+
adapter: DateAdapter<T>;
|
|
399
403
|
longitudeDeg?: number;
|
|
400
404
|
tzOffsetHours?: number;
|
|
401
405
|
useMeanSolarTimeForHour?: boolean;
|
|
@@ -436,15 +440,15 @@ function applyMeanSolarTime<T>(
|
|
|
436
440
|
): T
|
|
437
441
|
```
|
|
438
442
|
|
|
439
|
-
#### `effectiveDayDate(
|
|
443
|
+
#### `effectiveDayDate(dtLocal, options)`
|
|
440
444
|
|
|
441
445
|
Calculate the effective date considering day boundary rules.
|
|
442
446
|
|
|
443
447
|
```typescript
|
|
444
448
|
function effectiveDayDate<T>(
|
|
445
|
-
adapter: DateAdapter<T>,
|
|
446
449
|
dtLocal: T,
|
|
447
450
|
options: {
|
|
451
|
+
adapter: DateAdapter<T>;
|
|
448
452
|
dayBoundary?: "midnight" | "zi23";
|
|
449
453
|
longitudeDeg?: number;
|
|
450
454
|
tzOffsetHours?: number;
|
|
@@ -498,17 +502,17 @@ function analyzeRelations(
|
|
|
498
502
|
): RelationsResult;
|
|
499
503
|
```
|
|
500
504
|
|
|
501
|
-
#### `calculateMajorLuck(
|
|
505
|
+
#### `calculateMajorLuck(birthDateTime, gender, yearPillar, monthPillar, options)`
|
|
502
506
|
|
|
503
507
|
Calculates major luck periods and starting age.
|
|
504
508
|
|
|
505
509
|
```typescript
|
|
506
510
|
function calculateMajorLuck<T>(
|
|
507
|
-
adapter: DateAdapter<T>,
|
|
508
511
|
birthDateTime: T,
|
|
509
512
|
gender: "male" | "female",
|
|
510
513
|
yearPillar: string,
|
|
511
|
-
monthPillar: string
|
|
514
|
+
monthPillar: string,
|
|
515
|
+
options: { adapter: DateAdapter<T>; longitudeDeg?: number; tzOffsetHours?: number }
|
|
512
516
|
): MajorLuckResult;
|
|
513
517
|
```
|
|
514
518
|
|
|
@@ -525,14 +529,14 @@ function analyzeYongShen(
|
|
|
525
529
|
): YongShenResult;
|
|
526
530
|
```
|
|
527
531
|
|
|
528
|
-
#### `analyzeSolarTerms(
|
|
532
|
+
#### `analyzeSolarTerms(datetime, options)`
|
|
529
533
|
|
|
530
534
|
Calculates current and next solar term info with elapsed days.
|
|
531
535
|
|
|
532
536
|
```typescript
|
|
533
537
|
function analyzeSolarTerms<T>(
|
|
534
|
-
|
|
535
|
-
|
|
538
|
+
dtLocal: T,
|
|
539
|
+
options: { adapter: DateAdapter<T> }
|
|
536
540
|
): SolarTermInfo;
|
|
537
541
|
```
|
|
538
542
|
|
|
@@ -548,15 +552,14 @@ function analyzeSolarTerms<T>(
|
|
|
548
552
|
}
|
|
549
553
|
```
|
|
550
554
|
|
|
551
|
-
#### `getSolarTermsForYear(
|
|
555
|
+
#### `getSolarTermsForYear(year, options)`
|
|
552
556
|
|
|
553
557
|
Calculates all 24 solar terms for a specific year.
|
|
554
558
|
|
|
555
559
|
```typescript
|
|
556
560
|
function getSolarTermsForYear<T>(
|
|
557
|
-
adapter: DateAdapter<T>,
|
|
558
561
|
year: number,
|
|
559
|
-
timezone: string
|
|
562
|
+
options: { adapter: DateAdapter<T>; timezone: string }
|
|
560
563
|
): Array<{ term: SolarTerm; date: {...} }>;
|
|
561
564
|
```
|
|
562
565
|
|
|
@@ -592,12 +595,14 @@ console.log(solarTime.hour); // ~11.47 (11:28)
|
|
|
592
595
|
- Zi hour (子時) straddles midnight (23:00-01:00)
|
|
593
596
|
|
|
594
597
|
```typescript
|
|
595
|
-
const result1 = getFourPillars(
|
|
598
|
+
const result1 = getFourPillars(dt, {
|
|
599
|
+
adapter,
|
|
596
600
|
longitudeDeg: 126.9778,
|
|
597
601
|
preset: { ...STANDARD_PRESET, dayBoundary: "midnight" },
|
|
598
602
|
});
|
|
599
603
|
|
|
600
|
-
const result2 = getFourPillars(
|
|
604
|
+
const result2 = getFourPillars(dt, {
|
|
605
|
+
adapter,
|
|
601
606
|
longitudeDeg: 126.9778,
|
|
602
607
|
preset: { ...STANDARD_PRESET, dayBoundary: "zi23" },
|
|
603
608
|
});
|
|
@@ -614,7 +619,8 @@ const customConfig = {
|
|
|
614
619
|
useMeanSolarTimeForBoundary: false, // Local time for day boundary
|
|
615
620
|
};
|
|
616
621
|
|
|
617
|
-
const result = getFourPillars(
|
|
622
|
+
const result = getFourPillars(dt, {
|
|
623
|
+
adapter,
|
|
618
624
|
longitudeDeg: 126.9778,
|
|
619
625
|
preset: customConfig,
|
|
620
626
|
});
|
|
@@ -637,7 +643,8 @@ Common city longitudes for reference:
|
|
|
637
643
|
### Major and Yearly Luck Calculation
|
|
638
644
|
|
|
639
645
|
```typescript
|
|
640
|
-
const saju = getSaju(
|
|
646
|
+
const saju = getSaju(dt, {
|
|
647
|
+
adapter,
|
|
641
648
|
longitudeDeg: 126.9778,
|
|
642
649
|
gender: "female",
|
|
643
650
|
yearlyLuckRange: { from: 2024, to: 2030 }
|
|
@@ -656,7 +663,8 @@ saju.yearlyLuck.forEach(luck => {
|
|
|
656
663
|
### Solar Terms Info
|
|
657
664
|
|
|
658
665
|
```typescript
|
|
659
|
-
const saju = getSaju(
|
|
666
|
+
const saju = getSaju(dt, {
|
|
667
|
+
adapter,
|
|
660
668
|
longitudeDeg: 126.9778,
|
|
661
669
|
gender: "male",
|
|
662
670
|
});
|
|
@@ -727,7 +735,8 @@ const nyTime = DateTime.fromObject(
|
|
|
727
735
|
{ zone: "America/New_York" }
|
|
728
736
|
);
|
|
729
737
|
|
|
730
|
-
const result = getFourPillars(
|
|
738
|
+
const result = getFourPillars(nyTime, {
|
|
739
|
+
adapter,
|
|
731
740
|
longitudeDeg: -74.0060, // NYC longitude
|
|
732
741
|
tzOffsetHours: -5, // EST offset
|
|
733
742
|
preset: TRADITIONAL_PRESET,
|
|
@@ -740,11 +749,11 @@ const result = getFourPillars(adapter, nyTime, {
|
|
|
740
749
|
import { yearPillar, monthPillar, dayPillarFromDate, hourPillar } from "@gracefullight/saju";
|
|
741
750
|
|
|
742
751
|
// Year pillar
|
|
743
|
-
const year = yearPillar(
|
|
752
|
+
const year = yearPillar(dt, { adapter });
|
|
744
753
|
console.log(year.pillar, year.solarYear);
|
|
745
754
|
|
|
746
755
|
// Month pillar
|
|
747
|
-
const month = monthPillar(
|
|
756
|
+
const month = monthPillar(dt, { adapter });
|
|
748
757
|
console.log(month.pillar, month.sunLonDeg);
|
|
749
758
|
|
|
750
759
|
// Day pillar (no adapter needed)
|
|
@@ -752,7 +761,8 @@ const day = dayPillarFromDate({ year: 1985, month: 5, day: 15 });
|
|
|
752
761
|
console.log(day.pillar);
|
|
753
762
|
|
|
754
763
|
// Hour pillar with solar time
|
|
755
|
-
const hour = hourPillar(
|
|
764
|
+
const hour = hourPillar(dt, {
|
|
765
|
+
adapter,
|
|
756
766
|
longitudeDeg: 126.9778,
|
|
757
767
|
useMeanSolarTimeForHour: true,
|
|
758
768
|
});
|
|
@@ -774,7 +784,8 @@ const results = birthDates.map((birth) => {
|
|
|
774
784
|
const dt = DateTime.fromObject(birth, { zone: "Asia/Seoul" });
|
|
775
785
|
return {
|
|
776
786
|
birth,
|
|
777
|
-
pillars: getFourPillars(
|
|
787
|
+
pillars: getFourPillars(dt, {
|
|
788
|
+
adapter,
|
|
778
789
|
longitudeDeg: 126.9778,
|
|
779
790
|
preset: STANDARD_PRESET,
|
|
780
791
|
}),
|
package/README.md
CHANGED
|
@@ -75,7 +75,8 @@ const birthDateTime = DateTime.fromObject(
|
|
|
75
75
|
);
|
|
76
76
|
|
|
77
77
|
// getSaju: 사주 팔자, 십신, 신강약, 합충, 용신, 절기, 대운, 세운을 한 번에 계산
|
|
78
|
-
const result = getSaju(
|
|
78
|
+
const result = getSaju(birthDateTime, {
|
|
79
|
+
adapter,
|
|
79
80
|
gender: "male", // 필수: 대운 계산에 필요
|
|
80
81
|
// longitudeDeg: 126.9778, // 선택: 생략 시 타임존 기준 경도 사용
|
|
81
82
|
// preset: STANDARD_PRESET, // 선택: 기본값은 STANDARD_PRESET
|
|
@@ -106,7 +107,7 @@ const birthDateTime = DateTime.fromObject(
|
|
|
106
107
|
{ zone: "Asia/Seoul" }
|
|
107
108
|
);
|
|
108
109
|
|
|
109
|
-
const result = getFourPillars(
|
|
110
|
+
const result = getFourPillars(birthDateTime, { adapter });
|
|
110
111
|
|
|
111
112
|
console.log(result);
|
|
112
113
|
```
|
|
@@ -128,13 +129,15 @@ const dt = DateTime.fromObject(
|
|
|
128
129
|
);
|
|
129
130
|
|
|
130
131
|
// 표준 프리셋: 자정(00:00) 날짜 경계, 태양시 보정 없음
|
|
131
|
-
const resultStandard = getFourPillars(
|
|
132
|
+
const resultStandard = getFourPillars(dt, {
|
|
133
|
+
adapter,
|
|
132
134
|
longitudeDeg: 126.9778,
|
|
133
135
|
preset: STANDARD_PRESET,
|
|
134
136
|
});
|
|
135
137
|
|
|
136
138
|
// 전통 프리셋: 자시(23:00) 날짜 경계, 태양시 보정 사용
|
|
137
|
-
const resultTraditional = getFourPillars(
|
|
139
|
+
const resultTraditional = getFourPillars(dt, {
|
|
140
|
+
adapter,
|
|
138
141
|
longitudeDeg: 126.9778,
|
|
139
142
|
preset: TRADITIONAL_PRESET,
|
|
140
143
|
});
|
|
@@ -153,7 +156,8 @@ const dt = {
|
|
|
153
156
|
timeZone: "Asia/Seoul",
|
|
154
157
|
};
|
|
155
158
|
|
|
156
|
-
const result = getFourPillars(
|
|
159
|
+
const result = getFourPillars(dt, {
|
|
160
|
+
adapter,
|
|
157
161
|
longitudeDeg: 126.9778,
|
|
158
162
|
preset: STANDARD_PRESET,
|
|
159
163
|
});
|
|
@@ -225,16 +229,16 @@ const myAdapter: DateAdapter<MyDateType> = {
|
|
|
225
229
|
|
|
226
230
|
### 핵심 함수
|
|
227
231
|
|
|
228
|
-
#### `getSaju(
|
|
232
|
+
#### `getSaju(datetime, options)`
|
|
229
233
|
|
|
230
234
|
사주 분석의 모든 결과(팔자, 십신, 신강약, 합충, 용신, 대운)를 한 번에 계산합니다.
|
|
231
235
|
|
|
232
236
|
```typescript
|
|
233
237
|
function getSaju<T>(
|
|
234
|
-
adapter: DateAdapter<T>,
|
|
235
238
|
dtLocal: T,
|
|
236
239
|
options: {
|
|
237
|
-
|
|
240
|
+
adapter: DateAdapter<T>;
|
|
241
|
+
longitudeDeg?: number;
|
|
238
242
|
gender: "male" | "female"; // 필수
|
|
239
243
|
tzOffsetHours?: number;
|
|
240
244
|
preset?: typeof STANDARD_PRESET;
|
|
@@ -244,16 +248,16 @@ function getSaju<T>(
|
|
|
244
248
|
): SajuResult;
|
|
245
249
|
```
|
|
246
250
|
|
|
247
|
-
#### `getFourPillars(
|
|
251
|
+
#### `getFourPillars(datetime, options)`
|
|
248
252
|
|
|
249
253
|
네 기둥(연주, 월주, 일주, 시주) 모두 계산
|
|
250
254
|
|
|
251
255
|
```typescript
|
|
252
256
|
function getFourPillars<T>(
|
|
253
|
-
adapter: DateAdapter<T>,
|
|
254
257
|
datetime: T,
|
|
255
258
|
options: {
|
|
256
|
-
|
|
259
|
+
adapter: DateAdapter<T>;
|
|
260
|
+
longitudeDeg?: number;
|
|
257
261
|
preset?: {
|
|
258
262
|
dayBoundary: "midnight" | "zi23";
|
|
259
263
|
useMeanSolarTimeForHour: boolean;
|
|
@@ -282,23 +286,23 @@ function getFourPillars<T>(
|
|
|
282
286
|
```
|
|
283
287
|
|
|
284
288
|
**매개변수:**
|
|
285
|
-
- `adapter`: DateAdapter 인스턴스
|
|
286
289
|
- `datetime`: 어댑터 형식의 날짜/시간 객체
|
|
287
290
|
- `options`:
|
|
288
|
-
- `
|
|
291
|
+
- `adapter`: DateAdapter 인스턴스
|
|
292
|
+
- `longitudeDeg`: 지리적 경도(도 단위) (예: 서울 126.9778), 선택사항
|
|
289
293
|
- `preset`: 설정 프리셋 (`STANDARD_PRESET` 또는 `TRADITIONAL_PRESET` 사용)
|
|
290
294
|
- `tzOffsetHours`: 타임존 오프셋(시간 단위), 선택사항 (기본값: 9, KST)
|
|
291
295
|
|
|
292
296
|
**반환값:** 연월일시 기둥, 음력 날짜, 메타데이터를 포함한 객체
|
|
293
297
|
|
|
294
|
-
#### `yearPillar(
|
|
298
|
+
#### `yearPillar(datetime, options)`
|
|
295
299
|
|
|
296
300
|
입춘(立春, 봄의 시작) 기준으로 연주만 계산
|
|
297
301
|
|
|
298
302
|
```typescript
|
|
299
303
|
function yearPillar<T>(
|
|
300
|
-
|
|
301
|
-
|
|
304
|
+
datetime: T,
|
|
305
|
+
options: { adapter: DateAdapter<T> }
|
|
302
306
|
): {
|
|
303
307
|
idx60: number;
|
|
304
308
|
pillar: string;
|
|
@@ -306,14 +310,14 @@ function yearPillar<T>(
|
|
|
306
310
|
}
|
|
307
311
|
```
|
|
308
312
|
|
|
309
|
-
#### `monthPillar(
|
|
313
|
+
#### `monthPillar(datetime, options)`
|
|
310
314
|
|
|
311
315
|
태양 황경 기준으로 월주만 계산
|
|
312
316
|
|
|
313
317
|
```typescript
|
|
314
318
|
function monthPillar<T>(
|
|
315
|
-
|
|
316
|
-
|
|
319
|
+
datetime: T,
|
|
320
|
+
options: { adapter: DateAdapter<T> }
|
|
317
321
|
): {
|
|
318
322
|
pillar: string;
|
|
319
323
|
sunLonDeg: number;
|
|
@@ -387,15 +391,15 @@ const solar = getSolarDate(1999, 11, 25, false);
|
|
|
387
391
|
// { year: 2000, month: 1, day: 1 }
|
|
388
392
|
```
|
|
389
393
|
|
|
390
|
-
#### `hourPillar(
|
|
394
|
+
#### `hourPillar(datetime, options)`
|
|
391
395
|
|
|
392
396
|
태양시 보정 옵션과 함께 시주만 계산
|
|
393
397
|
|
|
394
398
|
```typescript
|
|
395
399
|
function hourPillar<T>(
|
|
396
|
-
adapter: DateAdapter<T>,
|
|
397
400
|
datetime: T,
|
|
398
|
-
options
|
|
401
|
+
options: {
|
|
402
|
+
adapter: DateAdapter<T>;
|
|
399
403
|
longitudeDeg?: number;
|
|
400
404
|
tzOffsetHours?: number;
|
|
401
405
|
useMeanSolarTimeForHour?: boolean;
|
|
@@ -436,15 +440,15 @@ function applyMeanSolarTime<T>(
|
|
|
436
440
|
): T
|
|
437
441
|
```
|
|
438
442
|
|
|
439
|
-
#### `effectiveDayDate(
|
|
443
|
+
#### `effectiveDayDate(dtLocal, options)`
|
|
440
444
|
|
|
441
445
|
날짜 경계 규칙을 고려한 유효 날짜 계산
|
|
442
446
|
|
|
443
447
|
```typescript
|
|
444
448
|
function effectiveDayDate<T>(
|
|
445
|
-
adapter: DateAdapter<T>,
|
|
446
449
|
dtLocal: T,
|
|
447
450
|
options: {
|
|
451
|
+
adapter: DateAdapter<T>;
|
|
448
452
|
dayBoundary?: "midnight" | "zi23";
|
|
449
453
|
longitudeDeg?: number;
|
|
450
454
|
tzOffsetHours?: number;
|
|
@@ -498,17 +502,17 @@ function analyzeRelations(
|
|
|
498
502
|
): RelationsResult;
|
|
499
503
|
```
|
|
500
504
|
|
|
501
|
-
#### `calculateMajorLuck(
|
|
505
|
+
#### `calculateMajorLuck(birthDateTime, gender, yearPillar, monthPillar, options)`
|
|
502
506
|
|
|
503
507
|
대운의 흐름과 시작 연령을 계산합니다.
|
|
504
508
|
|
|
505
509
|
```typescript
|
|
506
510
|
function calculateMajorLuck<T>(
|
|
507
|
-
adapter: DateAdapter<T>,
|
|
508
511
|
birthDateTime: T,
|
|
509
512
|
gender: "male" | "female",
|
|
510
513
|
yearPillar: string,
|
|
511
|
-
monthPillar: string
|
|
514
|
+
monthPillar: string,
|
|
515
|
+
options: { adapter: DateAdapter<T>; longitudeDeg?: number; tzOffsetHours?: number }
|
|
512
516
|
): MajorLuckResult;
|
|
513
517
|
```
|
|
514
518
|
|
|
@@ -525,14 +529,14 @@ function analyzeYongShen(
|
|
|
525
529
|
): YongShenResult;
|
|
526
530
|
```
|
|
527
531
|
|
|
528
|
-
#### `analyzeSolarTerms(
|
|
532
|
+
#### `analyzeSolarTerms(datetime, options)`
|
|
529
533
|
|
|
530
534
|
현재 및 다음 절기 정보와 경과일을 계산합니다.
|
|
531
535
|
|
|
532
536
|
```typescript
|
|
533
537
|
function analyzeSolarTerms<T>(
|
|
534
|
-
|
|
535
|
-
|
|
538
|
+
dtLocal: T,
|
|
539
|
+
options: { adapter: DateAdapter<T> }
|
|
536
540
|
): SolarTermInfo;
|
|
537
541
|
```
|
|
538
542
|
|
|
@@ -548,15 +552,14 @@ function analyzeSolarTerms<T>(
|
|
|
548
552
|
}
|
|
549
553
|
```
|
|
550
554
|
|
|
551
|
-
#### `getSolarTermsForYear(
|
|
555
|
+
#### `getSolarTermsForYear(year, options)`
|
|
552
556
|
|
|
553
557
|
특정 연도의 24절기 날짜를 모두 계산합니다.
|
|
554
558
|
|
|
555
559
|
```typescript
|
|
556
560
|
function getSolarTermsForYear<T>(
|
|
557
|
-
adapter: DateAdapter<T>,
|
|
558
561
|
year: number,
|
|
559
|
-
timezone: string
|
|
562
|
+
options: { adapter: DateAdapter<T>; timezone: string }
|
|
560
563
|
): Array<{ term: SolarTerm; date: {...} }>;
|
|
561
564
|
```
|
|
562
565
|
|
|
@@ -592,12 +595,14 @@ console.log(solarTime.hour); // ~11.47 (11:28)
|
|
|
592
595
|
- 자시(子時)가 자정을 걸침 (23:00-01:00)
|
|
593
596
|
|
|
594
597
|
```typescript
|
|
595
|
-
const result1 = getFourPillars(
|
|
598
|
+
const result1 = getFourPillars(dt, {
|
|
599
|
+
adapter,
|
|
596
600
|
longitudeDeg: 126.9778,
|
|
597
601
|
preset: { ...STANDARD_PRESET, dayBoundary: "midnight" },
|
|
598
602
|
});
|
|
599
603
|
|
|
600
|
-
const result2 = getFourPillars(
|
|
604
|
+
const result2 = getFourPillars(dt, {
|
|
605
|
+
adapter,
|
|
601
606
|
longitudeDeg: 126.9778,
|
|
602
607
|
preset: { ...STANDARD_PRESET, dayBoundary: "zi23" },
|
|
603
608
|
});
|
|
@@ -614,7 +619,8 @@ const customConfig = {
|
|
|
614
619
|
useMeanSolarTimeForBoundary: false, // 날짜 경계는 현지 시간 사용
|
|
615
620
|
};
|
|
616
621
|
|
|
617
|
-
const result = getFourPillars(
|
|
622
|
+
const result = getFourPillars(dt, {
|
|
623
|
+
adapter,
|
|
618
624
|
longitudeDeg: 126.9778,
|
|
619
625
|
preset: customConfig,
|
|
620
626
|
});
|
|
@@ -637,7 +643,8 @@ const result = getFourPillars(adapter, dt, {
|
|
|
637
643
|
### 대운과 세운 계산
|
|
638
644
|
|
|
639
645
|
```typescript
|
|
640
|
-
const saju = getSaju(
|
|
646
|
+
const saju = getSaju(dt, {
|
|
647
|
+
adapter,
|
|
641
648
|
longitudeDeg: 126.9778,
|
|
642
649
|
gender: "female",
|
|
643
650
|
yearlyLuckRange: { from: 2024, to: 2030 }
|
|
@@ -656,7 +663,8 @@ saju.yearlyLuck.forEach(luck => {
|
|
|
656
663
|
### 절기 정보 확인
|
|
657
664
|
|
|
658
665
|
```typescript
|
|
659
|
-
const saju = getSaju(
|
|
666
|
+
const saju = getSaju(dt, {
|
|
667
|
+
adapter,
|
|
660
668
|
longitudeDeg: 126.9778,
|
|
661
669
|
gender: "male",
|
|
662
670
|
});
|
|
@@ -727,7 +735,8 @@ const nyTime = DateTime.fromObject(
|
|
|
727
735
|
{ zone: "America/New_York" }
|
|
728
736
|
);
|
|
729
737
|
|
|
730
|
-
const result = getFourPillars(
|
|
738
|
+
const result = getFourPillars(nyTime, {
|
|
739
|
+
adapter,
|
|
731
740
|
longitudeDeg: -74.0060, // 뉴욕 경도
|
|
732
741
|
tzOffsetHours: -5, // EST 오프셋
|
|
733
742
|
preset: TRADITIONAL_PRESET,
|
|
@@ -740,11 +749,11 @@ const result = getFourPillars(adapter, nyTime, {
|
|
|
740
749
|
import { yearPillar, monthPillar, dayPillarFromDate, hourPillar } from "@gracefullight/saju";
|
|
741
750
|
|
|
742
751
|
// 연주
|
|
743
|
-
const year = yearPillar(
|
|
752
|
+
const year = yearPillar(dt, { adapter });
|
|
744
753
|
console.log(year.pillar, year.solarYear);
|
|
745
754
|
|
|
746
755
|
// 월주
|
|
747
|
-
const month = monthPillar(
|
|
756
|
+
const month = monthPillar(dt, { adapter });
|
|
748
757
|
console.log(month.pillar, month.sunLonDeg);
|
|
749
758
|
|
|
750
759
|
// 일주 (어댑터 불필요)
|
|
@@ -752,7 +761,8 @@ const day = dayPillarFromDate({ year: 1985, month: 5, day: 15 });
|
|
|
752
761
|
console.log(day.pillar);
|
|
753
762
|
|
|
754
763
|
// 태양시를 사용한 시주
|
|
755
|
-
const hour = hourPillar(
|
|
764
|
+
const hour = hourPillar(dt, {
|
|
765
|
+
adapter,
|
|
756
766
|
longitudeDeg: 126.9778,
|
|
757
767
|
useMeanSolarTimeForHour: true,
|
|
758
768
|
});
|
|
@@ -774,7 +784,8 @@ const results = birthDates.map((birth) => {
|
|
|
774
784
|
const dt = DateTime.fromObject(birth, { zone: "Asia/Seoul" });
|
|
775
785
|
return {
|
|
776
786
|
birth,
|
|
777
|
-
pillars: getFourPillars(
|
|
787
|
+
pillars: getFourPillars(dt, {
|
|
788
|
+
adapter,
|
|
778
789
|
longitudeDeg: 126.9778,
|
|
779
790
|
preset: STANDARD_PRESET,
|
|
780
791
|
}),
|