Korean Saju (Four Pillars) and Manseryeok calculation library
npm install manseryeokKorean Saju (Four Pillars) and Manseryeok calculation library
한국 사주명리학의 만세력을 계산하는 TypeScript 라이브러리입니다.
양력/음력 날짜를 입력하면 정확한 사주팔자(년주, 월주, 일주, 시주)를 계산해줍니다.
- 🎯 정확한 사주팔자 계산 (년주, 월주, 일주, 시주)
- 🌙 음력/양력 자동 변환
- 📅 절기 기반 월주 계산
- 🔄 60갑자 순환 계산
- ⏰ 분(minute) 단위까지 고려한 정밀한 시주 계산
- ⚡ TypeScript 완벽 지원
- 🧪 철저한 테스트 커버리지
``bash`
npm install manseryeokor
yarn add manseryeokor
pnpm add manseryeok
`typescript
import { calculateFourPillars, fourPillarsToString } from 'manseryeok';
// 양력 날짜로 사주 계산
const result = calculateFourPillars({
year: 1992, // 연도 (양력)
month: 10, // 월 (양력, 1-12)
day: 24, // 일 (양력, 1-31)
hour: 5, // 시 (24시간제, 0-23)
minute: 30 // 분 (0-59)
});
console.log(fourPillarsToString(result));
// 출력: 임신연주, 경술월주, 계유일주, 을묘시주
// 다양한 출력 형식
console.log(result.toString());
// 출력: 임신년주, 경술월주, 계유일주, 을묘시주
console.log(result.toObject());
// 출력: { year: '임신', month: '경술', day: '계유', hour: '을묘' }
console.log(result.toHanjaString());
// 출력: 壬申年柱, 庚戌月柱, 癸酉日柱, 乙卯時柱
console.log(result.toHanjaObject());
// 출력: {
// year: { korean: '임신', hanja: '壬申' },
// month: { korean: '경술', hanja: '庚戌' },
// day: { korean: '계유', hanja: '癸酉' },
// hour: { korean: '을묘', hanja: '乙卯' }
// }
// 음양오행 정보
console.log(result.dayElement);
// 출력: { stem: '수', branch: '금' }
// stem은 천간(계)의 오행, branch는 지지(유)의 오행
console.log(result.dayYinYang);
// 출력: { stem: '음', branch: '음' }
// stem은 천간(계)의 음양, branch는 지지(유)의 음양
`
`typescript
// 음력 날짜로 사주 계산
const result = calculateFourPillars({
year: 1992, // 연도 (음력)
month: 9, // 월 (음력, 1-12)
day: 29, // 일 (음력, 1-30)
hour: 5, // 시 (24시간제, 0-23)
minute: 30, // 분 (0-59)
isLunar: true, // 음력 사용 여부 (필수)
isLeapMonth: false // 윤달 여부 (음력 사용시에만 필요)
});
// 위 음력 1992년 9월 29일은 양력 1992년 10월 24일과 동일
`
| 파라미터 | 타입 | 설명 | 범위/예시 |
|---------|------|------|----------|
| year | number | 연도 | 1900-2100 |month
| | number | 월 | 1-12 |day
| | number | 일 | 1-31 (양력), 1-30 (음력) |hour
| | number | 시 (24시간제) | 0-23 (0시 = 자정, 13시 = 오후 1시) |minute
| | number | 분 | 0-59 |isLunar
| | boolean? | 음력 사용 여부 | true/false (기본값: false) |isLeapMonth
| | boolean? | 윤달 여부 | true/false (음력일 때만 사용) |
`typescript
// 새벽 3시 15분
const time1 = { hour: 3, minute: 15 };
// 오전 9시 정각
const time2 = { hour: 9, minute: 0 };
// 오후 2시 30분
const time3 = { hour: 14, minute: 30 };
// 밤 11시 45분
const time4 = { hour: 23, minute: 45 };
`
음력과 양력을 서로 변환할 수 있습니다:
`typescript
import { solarToLunar, lunarToSolar } from 'manseryeok';
// 양력 → 음력 변환
const lunar = solarToLunar(2024, 1, 1);
console.log(lunar);
// { year: 2023, month: 11, day: 20, isLeapMonth: false }
// 2024년 1월 1일은 음력으로 2023년 11월 20일
// 음력 → 양력 변환
const solar = lunarToSolar(2023, 11, 20, false);
console.log(solar);
// { year: 2024, month: 1, day: 1 }
// 음력 2023년 11월 20일은 양력으로 2024년 1월 1일
// 윤달 처리 예시
const leapMonthSolar = lunarToSolar(2020, 4, 1, true); // 2020년 윤4월 1일
console.log(leapMonthSolar);
// { year: 2020, month: 5, day: 23 }
`
`typescript
import {
getHeavenlyStemYinYang,
getHeavenlyStemElement,
getEarthlyBranchElement
} from 'manseryeok';
// 천간의 음양 확인
console.log(getHeavenlyStemYinYang('갑')); // '양'
// 천간의 오행 확인
console.log(getHeavenlyStemElement('갑')); // '목'
// 지지의 오행 확인
console.log(getEarthlyBranchElement('자')); // '수'
`
`typescript
interface BirthInfo {
year: number;
month: number;
day: number;
hour: number;
minute: number;
isLunar?: boolean; // true면 음력, false/undefined면 양력
isLeapMonth?: boolean; // 음력 윤달 여부
}
interface Pillar {
heavenlyStem: HeavenlyStem; // 천간
earthlyBranch: EarthlyBranch; // 지지
}
interface FourPillars {
year: Pillar; // 연주
month: Pillar; // 월주
day: Pillar; // 일주
hour: Pillar; // 시주
}
`
- calculateFourPillars(birthInfo: BirthInfo): FourPillars - 사주 계산fourPillarsToString(fourPillars: FourPillars): string
- - 사주를 한국어 문자열로 변환solarToLunar(year, month, day): LunarDate
- - 양력을 음력으로 변환lunarToSolar(year, month, day, isLeapMonth): SolarDate
- - 음력을 양력으로 변환getHeavenlyStemYinYang(stem: HeavenlyStem): YinYang
- - 천간의 음양getHeavenlyStemElement(stem: HeavenlyStem): FiveElement
- - 천간의 오행getEarthlyBranchElement(branch: EarthlyBranch): FiveElement
- - 지지의 오행
시주 계산은 다음의 12시진 체계를 따릅니다:
| 시진 | 시간대 | 24시간제 입력 예시 |
|------|--------|------------------|
| 자시(子時) | 23:00-01:00 | hour: 23 또는 hour: 0 |
| 축시(丑時) | 01:00-03:00 | hour: 1 또는 hour: 2 |
| 인시(寅時) | 03:00-05:00 | hour: 3 또는 hour: 4 |
| 묘시(卯時) | 05:00-07:00 | hour: 5 또는 hour: 6 |
| 진시(辰時) | 07:00-09:00 | hour: 7 또는 hour: 8 |
| 사시(巳時) | 09:00-11:00 | hour: 9 또는 hour: 10 |
| 오시(午時) | 11:00-13:00 | hour: 11 또는 hour: 12 |
| 미시(未時) | 13:00-15:00 | hour: 13 또는 hour: 14 |
| 신시(申時) | 15:00-17:00 | hour: 15 또는 hour: 16 |
| 유시(酉時) | 17:00-19:00 | hour: 17 또는 hour: 18 |
| 술시(戌時) | 19:00-21:00 | hour: 19 또는 hour: 20 |
| 해시(亥時) | 21:00-23:00 | hour: 21 또는 hour: 22 |
분(minute) 단위까지 고려하여 더 정확한 시주를 계산합니다:
- 각 시진의 경계에서 분을 고려하여 정확한 시진을 결정
- 예: 5시 30분은 묘시의 중반으로 정확하게 계산
`bashInstall dependencies
pnpm install
License
MIT © Yoohyojun
Contributing
Contributions are welcome! Please feel free to submit a Pull Request.
References
- 음력 데이터: 한국천문연구원
- 절기 계산: 천문학적 계산에 기반한 근사 공식
- 사주 계산: 전통 만세력 계산법
Examples
$3
`typescript
// 1. 양력으로 입력
const saju1 = calculateFourPillars({
year: 1990,
month: 5,
day: 15,
hour: 14, // 오후 2시
minute: 30
});// 2. 음력으로 입력 (음력 1990년 4월 21일)
const saju2 = calculateFourPillars({
year: 1990,
month: 4,
day: 21,
hour: 14,
minute: 30,
isLunar: true,
isLeapMonth: false
});
// 3. 자정 출생
const saju3 = calculateFourPillars({
year: 2000,
month: 1,
day: 1,
hour: 0, // 자정 (0시)
minute: 0
});
// 4. 밤 11시 출생 (자시)
const saju4 = calculateFourPillars({
year: 2000,
month: 1,
day: 1,
hour: 23, // 밤 11시 (자시)
minute: 30
});
``