SylarLong/lunar-lite

View on GitHub
src/types.ts

Summary

Maintainability
A
0 mins
Test Coverage
import { EARTHLY_BRANCHES, HEAVENLY_STEMS } from "./constants";

/**
 * 农历日期对象
 *
 * @property
 * - lunarYear 年
 * - lunarMonth 月
 * - lunarDay 日
 * - isLeap 月份是否闰月
 *
 * @function toString() 输出 YYYY-M-D 或 农历中文 字符串
 */
export type LunarDate = {
  /** 农历年 */
  lunarYear: number;
  /** 农历月 */
  lunarMonth: number;
  /** 农历日 */
  lunarDay: number;
  /** 是否闰月 */
  isLeap: boolean;
  /**
   * 转化为字符串
   *
   * @param toCnStr 是否使用中文字符串, 若该参数为false则字符串中不会携带闰月信息
   * @returns string
   * @example
   * lunarYear = 2023;
   * lunarMonth = 6;
   * lunarDay = 12;
   * isLeap = true;
   *
   * toString(); // 2023-6-12
   * toString(true); // 二〇二三年闰二月十一
   */
  toString: (toCnStr?: boolean) => string;
};

/**
 * 阳历日期对象
 *
 * @property
 * - solarYear 年
 * - solarMonth 月
 * - solarDay 日
 *
 * @function toString() 将对象以 YYYY-M-D 格式字符串输出
 */
export type SolarDate = {
  /** 公历年 */
  solarYear: number;
  /** 公历月 */
  solarMonth: number;
  /** 公历日 */
  solarDay: number;
  /**
   * 转化为字符串
   *
   * @returns string
   * @example
   * solarYear = 2023;
   * solarMonth = 6;
   * solarDay = 12;
   *
   * toString(); // 2023-6-12
   */
  toString: () => string;
};

export type HeavenlyStem = (typeof HEAVENLY_STEMS)[number];

export type EarthlyBranch = (typeof EARTHLY_BRANCHES)[number];

export type HeavenlyStemAndEarthlyBranch = [HeavenlyStem, EarthlyBranch];

export type HeavenlyStemAndEarthlyBranchDate = {
  /** 年柱[天干,地支] */
  yearly: HeavenlyStemAndEarthlyBranch;
  /** 月柱[天干,地支] */
  monthly: HeavenlyStemAndEarthlyBranch;
  /** 日柱[天干,地支] */
  daily: HeavenlyStemAndEarthlyBranch;
  /** 时柱[天干,地支] */
  hourly: HeavenlyStemAndEarthlyBranch;
  /**
   * 获取四柱的字符串
   *
   * @returns 四柱字符串,用空格隔开
   * @example
   * yearly = ['癸', '卯'];
   * monthly = ['戊', '午'];
   * daily = ['癸', '亥'];
   * hourly = ['甲', '寅'];
   * toString(); // 癸卯 戊午 癸亥 甲寅
   */
  toString: () => string;
};

export type Options = {
  /** exact:立春分界,normal:除夕分界 */
  year: "exact" | "normal";
};