Tham chiếu API

Chi tiết toàn bộ hàm, class và kiểu dữ liệu export từ @lichta/core.

LichTa

Class tĩnh (static) chứa 2 hàm chuyển đổi chính giữa Dương Lịch và Âm Lịch. Cả 2 đều dùng thuật toán Hồ Ngọc Đức, hỗ trợ năm trong khoảng 1800–2199.

LichTa.toLunar(day, month, year, timeZone?)

Chuyển đổi ngày Dương Lịch sang Âm Lịch.

  • day (number): Ngày dương lịch (1–31).
  • month (number): Tháng dương lịch (1–12).
  • year (number): Năm dương lịch (1800–2199).
  • timeZone (number, tùy chọn, mặc định: 7): Múi giờ GMT.

Trả về: LunarDate.

Throws: RangeError nếu year, month hoặc day ngoài phạm vi hợp lệ.

LichTa.toLunar(10, 2, 2024);
// -> { day: 1, month: 1, year: 2024, isLeap: false, jd: 2460351,
// dayCanChi: 'Giáp Thìn', monthCanChi: 'Bính Dần', yearCanChi: 'Giáp Thìn' }

LichTa.toSolar(lunarDay, lunarMonth, lunarYear, isLeap?, timeZone?)

Chuyển đổi ngày Âm Lịch sang Dương Lịch.

  • lunarDay (number): Ngày âm lịch (1–30).
  • lunarMonth (number): Tháng âm lịch (1–12).
  • lunarYear (number): Năm âm lịch (1800–2199).
  • isLeap (boolean, tùy chọn, mặc định: false): Có phải tháng nhuận không — bắt buộc truyền đúng nếu năm đó có tháng nhuận và bạn muốn lấy ngày của tháng nhuận thay vì tháng thường cùng số.
  • timeZone (number, tùy chọn, mặc định: 7): Múi giờ GMT.

Trả về: SolarDate.

Throws: RangeError nếu lunarYear ngoài phạm vi hợp lệ, hoặc nếu isLeap: true nhưng lunarMonth không phải là tháng nhuận thực sự của lunarYear đó.

LichTa.toSolar(1, 1, 2024, false);
// -> { day: 10, month: 2, year: 2024 }

// Năm 2020 có nhuận tháng 4 — phân biệt tháng 4 thường và tháng 4 nhuận:
LichTa.toSolar(1, 4, 2020, false); // -> 23/4/2020
LichTa.toSolar(1, 4, 2020, true); // -> 23/5/2020 (tháng nhuận)

Julian Day Number

2 hàm cấp thấp dùng để quy đổi qua lại giữa ngày Dương lịch và Julian Day Number (JDN) — hệ đếm ngày liên tục dùng trong thiên văn học, là nền tảng cho mọi phép tính của thư viện.

jdFromDate(day, month, year)

Chuyển ngày Dương lịch (Gregorian) sang Julian Day Number.

  • day (number): Ngày (1–31).
  • month (number): Tháng (1–12).
  • year (number): Năm.

Trả về: number — Julian Day Number.

jdToDate(jd)

Chuyển Julian Day Number ngược lại ngày Dương lịch.

  • jd (number): Julian Day Number.

Trả về: [day, month, year] — tuple 3 số.

Can Chi & Phong Thủy

Các hàm tính Thiên Can – Địa Chi, Ngũ Hành (Mệnh), và Giờ Hoàng Đạo.

getYearDetails(year)

Lấy Can, Chi và Mệnh (Ngũ Hành) của một năm — áp dụng cho cả năm dương lịch lẫn năm âm lịch (công thức Can Chi năm không phụ thuộc lịch nào).

  • year (number): Năm cần tính (dương lịch hoặc âm lịch).

Trả về: { can: string, chi: string, menh: string, fullString: string }

getYearDetails(2024);
// -> { can: 'Giáp', chi: 'Thìn', menh: 'Thủy', fullString: 'Giáp Thìn - Mệnh Thủy' }

getDayCanChi(jd)

Tính Can Chi của một ngày, dựa trên Julian Day Number của ngày đó (lấy từ trường jd trong kết quả toLunar()).

  • jd (number): Julian Day Number của ngày.

Trả về: string — ví dụ "Giáp Tý".

getMonthCanChi(lunarMonth, lunarYear)

Tính Can Chi của một tháng âm lịch, theo quy tắc Ngũ Hổ Độn (Can tháng phụ thuộc Can năm).

  • lunarMonth (number): Tháng âm lịch (1–12).
  • lunarYear (number): Năm âm lịch.

Trả về: string — ví dụ "Bính Dần".

getHourCanChi(hour, dayJd)

Tính Can Chi của một giờ trong ngày (12 canh giờ, mỗi canh 2 tiếng, Tý bắt đầu từ 23h), theo quy tắc Ngũ Thử Độn (Can giờ phụ thuộc Can ngày).

  • hour (number): Giờ trong ngày (0–23).
  • dayJd (number): Julian Day Number của ngày.

Trả về: string — ví dụ "Canh Thìn".

getAuspiciousHours(dayJd)

Lấy danh sách 6 giờ Hoàng Đạo (giờ tốt) trong ngày, dựa trên Địa Chi của ngày đó.

  • dayJd (number): Julian Day Number của ngày.

Trả về: string[] — mảng 6 tên Địa Chi, ví dụ ['Tý', 'Sửu', 'Mão', 'Ngọ', 'Mùi', 'Dậu'].

Format & Hiển thị

Các hàm hỗ trợ hiển thị ngày âm lịch theo cách gọi truyền thống Việt Nam.

formatLunarDate(lunar, pattern)

Format một LunarDate theo pattern tùy chỉnh, tương tự cú pháp của các thư viện format ngày phổ biến.

  • lunar (LunarDate): Đối tượng ngày âm lịch (kết quả của toLunar()).
  • pattern (string): Chuỗi pattern, xem bảng token bên dưới.

Trả về: string.

TokenMô tảVí dụ
dd / dNgày (2 chữ số / không đệm 0)01, 1
MM / MTháng (2 chữ số / không đệm 0)01, 1
yyyy / yyNăm (4 chữ số / 2 chữ số cuối)2024, 24
CCCan Chi nămGiáp Thìn
MCCan Chi thángBính Dần
DCCan Chi ngàyGiáp Tý
L"Nhuận" nếu isLeap, ngược lại chuỗi rỗngNhuận
formatLunarDate(lunar, 'dd/MM/yyyy'); // '01/01/2024'
formatLunarDate(lunar, 'Ngày d tháng M năm CC'); // 'Ngày 1 tháng 1 năm Giáp Thìn'

formatTraditional(lunar)

Format một LunarDate theo cách gọi truyền thống Việt Nam đầy đủ (không cần pattern).

  • lunar (LunarDate): Đối tượng ngày âm lịch.

Trả về: string — ví dụ "Mùng Một tháng Giêng năm Giáp Thìn".

getMonthName(month)

Lấy tên tháng âm lịch dạng chữ truyền thống.

  • month (number): Tháng âm lịch (1–12).

Trả về: string — 1 → "Giêng", 12 → "Chạp", các tháng khác → "Hai"..."Mười Một".

Throws: RangeError nếu month ngoài khoảng 1–12.

getDayName(day)

Lấy tên ngày âm lịch theo cách gọi truyền thống: Mùng Một–Mười, Mười Một–Mười Chín, Hai Mươi, Hăm Mốt–Hăm Chín, Ba Mươi.

  • day (number): Ngày âm lịch (1–30).

Trả về: string — ví dụ: 1 → "Mùng Một", 15 → "Rằm", 30 → "Ba Mươi".

Throws: RangeError nếu day ngoài khoảng 1–30.

i18n

Thư viện hỗ trợ 4 ngôn ngữ cho tên Can Chi, Ngũ Hành, con giáp, tên tháng và thứ trong tuần: vi, en, ja, ko.

t(locale)

Lấy trọn bộ dịch cho một locale.

  • locale (Locale): 'vi' | 'en' | 'ja' | 'ko'.

Trả về: object gồm heavenlyStems, earthlyBranches, fiveElements, zodiacAnimals, monthNames, weekDays, leapLabel, yearLabel, monthLabel, destiny (đều là string[] hoặc string).

t('en').fiveElements; // ['Metal', 'Wood', 'Water', 'Fire', 'Earth']
t('ja').weekDays; // ['日', '月', '火', '水', '木', '金', '土']

getZodiacAnimal(branchIndex, locale?)

Lấy tên con giáp theo index Địa Chi và locale.

  • branchIndex (number): Index Địa Chi (0–11, 0 = Tý).
  • locale (Locale, tùy chọn, mặc định: 'vi'): Ngôn ngữ.

Trả về: string.

getZodiacAnimal(0, 'vi'); // 'Chuột'
getZodiacAnimal(4, 'en'); // 'Dragon'

Kiểu dữ liệu (Types)

3 kiểu dữ liệu chính được export dưới dạng type-only từ @lichta/core.

interface LunarDate {
  day: number;
  month: number;
  year: number;
  isLeap: boolean; // tháng này có phải tháng nhuận không
  jd: number; // Julian Day Number — dùng cho getDayCanChi/getHourCanChi
  dayCanChi?: string;
  monthCanChi?: string;
  yearCanChi?: string;
}

interface SolarDate {
  day: number;
  month: number;
  year: number;
}

type Locale = 'vi' | 'en' | 'ja' | 'ko';