lunar-typescript
Version:
lunar是一款无第三方依赖的公历(阳历)、农历(阴历、老黄历)、佛历和道历工具,支持星座、儒略日、干支、生肖、节气、节日、彭祖百忌、每日宜忌、吉神宜趋、凶煞宜忌、吉神(喜神/福神/财神/阳贵神/阴贵神)方位、胎神方位、冲煞、纳音、星宿、八字、五行、十神、建除十二值星、青龙名堂等十二神、黄道日及吉凶等。lunar is a calendar library for Solar and Chinese Lunar.
240 lines (239 loc) • 11.4 kB
JavaScript
import { Solar } from "./Solar.mjs";
const _SolarUtil = class {
static isLeapYear(year) {
if (year < 1600) {
return year % 4 === 0;
}
return year % 4 === 0 && year % 100 !== 0 || year % 400 === 0;
}
static getDaysOfMonth(year, month) {
if (1582 === year && 10 === month) {
return 21;
}
const m = month - 1;
let d = _SolarUtil.DAYS_OF_MONTH[m];
if (m === 1 && _SolarUtil.isLeapYear(year)) {
d++;
}
return d;
}
static getDaysOfYear(year) {
if (1582 === year) {
return 355;
}
return _SolarUtil.isLeapYear(year) ? 366 : 365;
}
static getDaysInYear(year, month, day) {
let days = 0;
for (let i = 1; i < month; i++) {
days += _SolarUtil.getDaysOfMonth(year, i);
}
let d = day;
if (1582 === year && 10 === month && day >= 15) {
if (day >= 15) {
d -= 10;
} else if (day > 4) {
throw new Error(`wrong solar year ${year} month ${month} day ${day}`);
}
}
days += d;
return days;
}
static getWeeksOfMonth(year, month, start) {
return Math.ceil((_SolarUtil.getDaysOfMonth(year, month) + Solar.fromYmd(year, month, 1).getWeek() - start) / 7);
}
static getDaysBetween(ay, am, ad, by, bm, bd) {
let n;
let days;
let i;
if (ay == by) {
n = _SolarUtil.getDaysInYear(by, bm, bd) - _SolarUtil.getDaysInYear(ay, am, ad);
} else if (ay > by) {
days = _SolarUtil.getDaysOfYear(by) - _SolarUtil.getDaysInYear(by, bm, bd);
for (i = by + 1; i < ay; i++) {
days += _SolarUtil.getDaysOfYear(i);
}
days += _SolarUtil.getDaysInYear(ay, am, ad);
n = -days;
} else {
days = _SolarUtil.getDaysOfYear(ay) - _SolarUtil.getDaysInYear(ay, am, ad);
for (i = ay + 1; i < by; i++) {
days += _SolarUtil.getDaysOfYear(i);
}
days += _SolarUtil.getDaysInYear(by, bm, bd);
n = days;
}
return n;
}
};
export let SolarUtil = _SolarUtil;
SolarUtil.WEEK = ["{w.sun}", "{w.mon}", "{w.tues}", "{w.wed}", "{w.thur}", "{w.fri}", "{w.sat}"];
SolarUtil.DAYS_OF_MONTH = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];
SolarUtil.XINGZUO = ["{xz.aries}", "{xz.taurus}", "{xz.gemini}", "{xz.cancer}", "{xz.leo}", "{xz.virgo}", "{xz.libra}", "{xz.scorpio}", "{xz.sagittarius}", "{xz.capricornus}", "{xz.aquarius}", "{xz.pisces}"];
SolarUtil.FESTIVAL = {
"1-1": "{jr.yuanDan}",
"2-14": "{jr.qingRen}",
"3-8": "{jr.fuNv}",
"3-12": "{jr.zhiShu}",
"3-15": "{jr.xiaoFei}",
"4-1": "{jr.yuRen}",
"5-1": "{jr.wuYi}",
"5-4": "{jr.qingNian}",
"6-1": "{jr.erTong}",
"7-1": "{jr.jianDang}",
"8-1": "{jr.jianJun}",
"9-10": "{jr.jiaoShi}",
"10-1": "{jr.guoQing}",
"10-31": "{jr.wanShengYe}",
"11-1": "{jr.wanSheng}",
"12-24": "{jr.pingAn}",
"12-25": "{jr.shengDan}"
};
SolarUtil.OTHER_FESTIVAL = {
"1-8": ["\u5468\u6069\u6765\u901D\u4E16\u7EAA\u5FF5\u65E5"],
"1-10": ["\u4E2D\u56FD\u4EBA\u6C11\u8B66\u5BDF\u8282"],
"1-14": ["\u65E5\u8BB0\u60C5\u4EBA\u8282"],
"1-21": ["\u5217\u5B81\u901D\u4E16\u7EAA\u5FF5\u65E5"],
"1-26": ["\u56FD\u9645\u6D77\u5173\u65E5"],
"1-27": ["\u56FD\u9645\u5927\u5C60\u6740\u7EAA\u5FF5\u65E5"],
"2-2": ["\u4E16\u754C\u6E7F\u5730\u65E5"],
"2-4": ["\u4E16\u754C\u6297\u764C\u65E5"],
"2-7": ["\u4EAC\u6C49\u94C1\u8DEF\u7F62\u5DE5\u7EAA\u5FF5\u65E5"],
"2-10": ["\u56FD\u9645\u6C14\u8C61\u8282"],
"2-19": ["\u9093\u5C0F\u5E73\u901D\u4E16\u7EAA\u5FF5\u65E5"],
"2-20": ["\u4E16\u754C\u793E\u4F1A\u516C\u6B63\u65E5"],
"2-21": ["\u56FD\u9645\u6BCD\u8BED\u65E5"],
"2-24": ["\u7B2C\u4E09\u4E16\u754C\u9752\u5E74\u65E5"],
"3-1": ["\u56FD\u9645\u6D77\u8C79\u65E5"],
"3-3": ["\u4E16\u754C\u91CE\u751F\u52A8\u690D\u7269\u65E5", "\u5168\u56FD\u7231\u8033\u65E5"],
"3-5": ["\u5468\u6069\u6765\u8BDE\u8FB0\u7EAA\u5FF5\u65E5", "\u4E2D\u56FD\u9752\u5E74\u5FD7\u613F\u8005\u670D\u52A1\u65E5"],
"3-6": ["\u4E16\u754C\u9752\u5149\u773C\u65E5"],
"3-7": ["\u5973\u751F\u8282"],
"3-12": ["\u5B59\u4E2D\u5C71\u901D\u4E16\u7EAA\u5FF5\u65E5"],
"3-14": ["\u9A6C\u514B\u601D\u901D\u4E16\u7EAA\u5FF5\u65E5", "\u767D\u8272\u60C5\u4EBA\u8282"],
"3-17": ["\u56FD\u9645\u822A\u6D77\u65E5"],
"3-18": ["\u5168\u56FD\u79D1\u6280\u4EBA\u624D\u6D3B\u52A8\u65E5", "\u5168\u56FD\u7231\u809D\u65E5"],
"3-20": ["\u56FD\u9645\u5E78\u798F\u65E5"],
"3-21": ["\u4E16\u754C\u68EE\u6797\u65E5", "\u4E16\u754C\u7761\u7720\u65E5", "\u56FD\u9645\u6D88\u9664\u79CD\u65CF\u6B67\u89C6\u65E5"],
"3-22": ["\u4E16\u754C\u6C34\u65E5"],
"3-23": ["\u4E16\u754C\u6C14\u8C61\u65E5"],
"3-24": ["\u4E16\u754C\u9632\u6CBB\u7ED3\u6838\u75C5\u65E5"],
"3-29": ["\u4E2D\u56FD\u9EC4\u82B1\u5C97\u4E03\u5341\u4E8C\u70C8\u58EB\u6B89\u96BE\u7EAA\u5FF5\u65E5"],
"4-2": ["\u56FD\u9645\u513F\u7AE5\u56FE\u4E66\u65E5", "\u4E16\u754C\u81EA\u95ED\u75C7\u65E5"],
"4-4": ["\u56FD\u9645\u5730\u96F7\u884C\u52A8\u65E5"],
"4-7": ["\u4E16\u754C\u536B\u751F\u65E5"],
"4-8": ["\u56FD\u9645\u73CD\u7A00\u52A8\u7269\u4FDD\u62A4\u65E5"],
"4-12": ["\u4E16\u754C\u822A\u5929\u65E5"],
"4-14": ["\u9ED1\u8272\u60C5\u4EBA\u8282"],
"4-15": ["\u5168\u6C11\u56FD\u5BB6\u5B89\u5168\u6559\u80B2\u65E5"],
"4-22": ["\u4E16\u754C\u5730\u7403\u65E5", "\u5217\u5B81\u8BDE\u8FB0\u7EAA\u5FF5\u65E5"],
"4-23": ["\u4E16\u754C\u8BFB\u4E66\u65E5"],
"4-24": ["\u4E2D\u56FD\u822A\u5929\u65E5"],
"4-25": ["\u513F\u7AE5\u9884\u9632\u63A5\u79CD\u5BA3\u4F20\u65E5"],
"4-26": ["\u4E16\u754C\u77E5\u8BC6\u4EA7\u6743\u65E5", "\u5168\u56FD\u759F\u75BE\u65E5"],
"4-28": ["\u4E16\u754C\u5B89\u5168\u751F\u4EA7\u4E0E\u5065\u5EB7\u65E5"],
"4-30": ["\u5168\u56FD\u4EA4\u901A\u5B89\u5168\u53CD\u601D\u65E5"],
"5-2": ["\u4E16\u754C\u91D1\u67AA\u9C7C\u65E5"],
"5-3": ["\u4E16\u754C\u65B0\u95FB\u81EA\u7531\u65E5"],
"5-5": ["\u9A6C\u514B\u601D\u8BDE\u8FB0\u7EAA\u5FF5\u65E5"],
"5-8": ["\u4E16\u754C\u7EA2\u5341\u5B57\u65E5"],
"5-11": ["\u4E16\u754C\u80A5\u80D6\u65E5"],
"5-12": ["\u5168\u56FD\u9632\u707E\u51CF\u707E\u65E5", "\u62A4\u58EB\u8282"],
"5-14": ["\u73AB\u7470\u60C5\u4EBA\u8282"],
"5-15": ["\u56FD\u9645\u5BB6\u5EAD\u65E5"],
"5-19": ["\u4E2D\u56FD\u65C5\u6E38\u65E5"],
"5-20": ["\u7F51\u7EDC\u60C5\u4EBA\u8282"],
"5-22": ["\u56FD\u9645\u751F\u7269\u591A\u6837\u6027\u65E5"],
"5-25": ["525\u5FC3\u7406\u5065\u5EB7\u8282"],
"5-27": ["\u4E0A\u6D77\u89E3\u653E\u65E5"],
"5-29": ["\u56FD\u9645\u7EF4\u548C\u4EBA\u5458\u65E5"],
"5-30": ["\u4E2D\u56FD\u4E94\u5345\u8FD0\u52A8\u7EAA\u5FF5\u65E5"],
"5-31": ["\u4E16\u754C\u65E0\u70DF\u65E5"],
"6-3": ["\u4E16\u754C\u81EA\u884C\u8F66\u65E5"],
"6-5": ["\u4E16\u754C\u73AF\u5883\u65E5"],
"6-6": ["\u5168\u56FD\u7231\u773C\u65E5"],
"6-8": ["\u4E16\u754C\u6D77\u6D0B\u65E5"],
"6-11": ["\u4E2D\u56FD\u4EBA\u53E3\u65E5"],
"6-14": ["\u4E16\u754C\u732E\u8840\u65E5", "\u4EB2\u4EB2\u60C5\u4EBA\u8282"],
"6-17": ["\u4E16\u754C\u9632\u6CBB\u8352\u6F20\u5316\u4E0E\u5E72\u65F1\u65E5"],
"6-20": ["\u4E16\u754C\u96BE\u6C11\u65E5"],
"6-21": ["\u56FD\u9645\u745C\u4F3D\u65E5"],
"6-25": ["\u5168\u56FD\u571F\u5730\u65E5"],
"6-26": ["\u56FD\u9645\u7981\u6BD2\u65E5", "\u8054\u5408\u56FD\u5BAA\u7AE0\u65E5"],
"7-1": ["\u9999\u6E2F\u56DE\u5F52\u7EAA\u5FF5\u65E5"],
"7-6": ["\u56FD\u9645\u63A5\u543B\u65E5", "\u6731\u5FB7\u901D\u4E16\u7EAA\u5FF5\u65E5"],
"7-7": ["\u4E03\u4E03\u4E8B\u53D8\u7EAA\u5FF5\u65E5"],
"7-11": ["\u4E16\u754C\u4EBA\u53E3\u65E5", "\u4E2D\u56FD\u822A\u6D77\u65E5"],
"7-14": ["\u94F6\u8272\u60C5\u4EBA\u8282"],
"7-18": ["\u66FC\u5FB7\u62C9\u56FD\u9645\u65E5"],
"7-30": ["\u56FD\u9645\u53CB\u8C0A\u65E5"],
"8-3": ["\u7537\u4EBA\u8282"],
"8-5": ["\u6069\u683C\u65AF\u901D\u4E16\u7EAA\u5FF5\u65E5"],
"8-6": ["\u56FD\u9645\u7535\u5F71\u8282"],
"8-8": ["\u5168\u6C11\u5065\u8EAB\u65E5"],
"8-9": ["\u56FD\u9645\u571F\u8457\u4EBA\u65E5"],
"8-12": ["\u56FD\u9645\u9752\u5E74\u8282"],
"8-14": ["\u7EFF\u8272\u60C5\u4EBA\u8282"],
"8-19": ["\u4E16\u754C\u4EBA\u9053\u4E3B\u4E49\u65E5", "\u4E2D\u56FD\u533B\u5E08\u8282"],
"8-22": ["\u9093\u5C0F\u5E73\u8BDE\u8FB0\u7EAA\u5FF5\u65E5"],
"8-29": ["\u5168\u56FD\u6D4B\u7ED8\u6CD5\u5BA3\u4F20\u65E5"],
"9-3": ["\u4E2D\u56FD\u6297\u65E5\u6218\u4E89\u80DC\u5229\u7EAA\u5FF5\u65E5"],
"9-5": ["\u4E2D\u534E\u6148\u5584\u65E5"],
"9-8": ["\u4E16\u754C\u626B\u76F2\u65E5"],
"9-9": ["\u6BDB\u6CFD\u4E1C\u901D\u4E16\u7EAA\u5FF5\u65E5", "\u5168\u56FD\u62D2\u7EDD\u9152\u9A7E\u65E5"],
"9-14": ["\u4E16\u754C\u6E05\u6D01\u5730\u7403\u65E5", "\u76F8\u7247\u60C5\u4EBA\u8282"],
"9-15": ["\u56FD\u9645\u6C11\u4E3B\u65E5"],
"9-16": ["\u56FD\u9645\u81ED\u6C27\u5C42\u4FDD\u62A4\u65E5"],
"9-17": ["\u4E16\u754C\u9A91\u884C\u65E5"],
"9-18": ["\u4E5D\u4E00\u516B\u4E8B\u53D8\u7EAA\u5FF5\u65E5"],
"9-20": ["\u5168\u56FD\u7231\u7259\u65E5"],
"9-21": ["\u56FD\u9645\u548C\u5E73\u65E5"],
"9-27": ["\u4E16\u754C\u65C5\u6E38\u65E5"],
"9-30": ["\u4E2D\u56FD\u70C8\u58EB\u7EAA\u5FF5\u65E5"],
"10-1": ["\u56FD\u9645\u8001\u5E74\u4EBA\u65E5"],
"10-2": ["\u56FD\u9645\u975E\u66B4\u529B\u65E5"],
"10-4": ["\u4E16\u754C\u52A8\u7269\u65E5"],
"10-11": ["\u56FD\u9645\u5973\u7AE5\u65E5"],
"10-10": ["\u8F9B\u4EA5\u9769\u547D\u7EAA\u5FF5\u65E5"],
"10-13": ["\u56FD\u9645\u51CF\u8F7B\u81EA\u7136\u707E\u5BB3\u65E5", "\u4E2D\u56FD\u5C11\u5E74\u5148\u950B\u961F\u8BDE\u8FB0\u65E5"],
"10-14": ["\u8461\u8404\u9152\u60C5\u4EBA\u8282"],
"10-16": ["\u4E16\u754C\u7CAE\u98DF\u65E5"],
"10-17": ["\u5168\u56FD\u6276\u8D2B\u65E5"],
"10-20": ["\u4E16\u754C\u7EDF\u8BA1\u65E5"],
"10-24": ["\u4E16\u754C\u53D1\u5C55\u4FE1\u606F\u65E5", "\u7A0B\u5E8F\u5458\u8282"],
"10-25": ["\u6297\u7F8E\u63F4\u671D\u7EAA\u5FF5\u65E5"],
"11-5": ["\u4E16\u754C\u6D77\u5578\u65E5"],
"11-8": ["\u8BB0\u8005\u8282"],
"11-9": ["\u5168\u56FD\u6D88\u9632\u65E5"],
"11-11": ["\u5149\u68CD\u8282"],
"11-12": ["\u5B59\u4E2D\u5C71\u8BDE\u8FB0\u7EAA\u5FF5\u65E5"],
"11-14": ["\u7535\u5F71\u60C5\u4EBA\u8282"],
"11-16": ["\u56FD\u9645\u5BBD\u5BB9\u65E5"],
"11-17": ["\u56FD\u9645\u5927\u5B66\u751F\u8282"],
"11-19": ["\u4E16\u754C\u5395\u6240\u65E5"],
"11-28": ["\u6069\u683C\u65AF\u8BDE\u8FB0\u7EAA\u5FF5\u65E5"],
"11-29": ["\u56FD\u9645\u58F0\u63F4\u5DF4\u52D2\u65AF\u5766\u4EBA\u6C11\u65E5"],
"12-1": ["\u4E16\u754C\u827E\u6ECB\u75C5\u65E5"],
"12-2": ["\u5168\u56FD\u4EA4\u901A\u5B89\u5168\u65E5"],
"12-3": ["\u4E16\u754C\u6B8B\u75BE\u4EBA\u65E5"],
"12-4": ["\u5168\u56FD\u6CD5\u5236\u5BA3\u4F20\u65E5"],
"12-5": ["\u4E16\u754C\u5F31\u80FD\u4EBA\u58EB\u65E5", "\u56FD\u9645\u5FD7\u613F\u4EBA\u5458\u65E5"],
"12-7": ["\u56FD\u9645\u6C11\u822A\u65E5"],
"12-9": ["\u4E16\u754C\u8DB3\u7403\u65E5", "\u56FD\u9645\u53CD\u8150\u8D25\u65E5"],
"12-10": ["\u4E16\u754C\u4EBA\u6743\u65E5"],
"12-11": ["\u56FD\u9645\u5C71\u5CB3\u65E5"],
"12-12": ["\u897F\u5B89\u4E8B\u53D8\u7EAA\u5FF5\u65E5"],
"12-13": ["\u56FD\u5BB6\u516C\u796D\u65E5"],
"12-14": ["\u62E5\u62B1\u60C5\u4EBA\u8282"],
"12-18": ["\u56FD\u9645\u79FB\u5F99\u8005\u65E5"],
"12-26": ["\u6BDB\u6CFD\u4E1C\u8BDE\u8FB0\u7EAA\u5FF5\u65E5"]
};
SolarUtil.WEEK_FESTIVAL = {
"3-0-1": "\u5168\u56FD\u4E2D\u5C0F\u5B66\u751F\u5B89\u5168\u6559\u80B2\u65E5",
"5-2-0": "\u6BCD\u4EB2\u8282",
"5-3-0": "\u5168\u56FD\u52A9\u6B8B\u65E5",
"6-3-0": "\u7236\u4EB2\u8282",
"9-3-6": "\u5168\u6C11\u56FD\u9632\u6559\u80B2\u65E5",
"10-1-1": "\u4E16\u754C\u4F4F\u623F\u65E5",
"11-4-4": "\u611F\u6069\u8282"
};