chinese-days
Version:
中国节假日、调休日、工作日、24节气查询,农历阳历互转,支持 TS、CommonJS、UMD 模块化使用,提供 ics 日历格式,可供 Google Calendar、Apple Calendar、Microsoft Outlook 等客户端订阅。
830 lines (829 loc) • 26.9 kB
JavaScript
var x = Object.defineProperty;
var B = (r, t, e) => t in r ? x(r, t, { enumerable: !0, configurable: !0, writable: !0, value: e }) : r[t] = e;
var c = (r, t, e) => B(r, typeof t != "symbol" ? t + "" : t, e);
const d = class d {
constructor(t) {
c(this, "_date");
t instanceof d ? this._date = new Date(t.toDate()) : t instanceof Date ? this._date = new Date(t) : typeof t == "string" || typeof t == "number" ? (this._date = new Date(t), typeof t == "string" && isNaN(this._date.getTime()) && (this._date = new Date(t.replace(/-/g, "/")))) : this._date = /* @__PURE__ */ new Date();
}
toDate() {
return this._date;
}
isValid() {
return !isNaN(this._date.getTime());
}
diff(t, e = "day") {
const a = new d(t).toDate(), s = this._date.getTime() - a.getTime();
switch (e) {
case "year":
return this._date.getFullYear() - a.getFullYear();
case "month":
return (this._date.getFullYear() - a.getFullYear()) * 12 + (this._date.getMonth() - a.getMonth());
case "day":
default:
return Math.floor(s / (1e3 * 60 * 60 * 24));
}
}
startOf(t) {
const e = new Date(this._date);
switch (t) {
case "year":
e.setMonth(0), e.setDate(1), e.setHours(0, 0, 0, 0);
break;
case "month":
e.setDate(1), e.setHours(0, 0, 0, 0);
break;
case "day":
e.setHours(0, 0, 0, 0);
break;
}
return new d(e);
}
endOf(t) {
const e = new Date(this._date);
switch (t) {
case "year":
e.setMonth(11), e.setDate(31), e.setHours(23, 59, 59, 999);
break;
case "month":
e.setDate(new Date(e.getFullYear(), e.getMonth() + 1, 0).getDate()), e.setHours(23, 59, 59, 999);
break;
case "day":
e.setHours(23, 59, 59, 999);
break;
}
return new d(e);
}
add(t, e) {
const a = new Date(this._date);
switch (e) {
case "year":
a.setFullYear(a.getFullYear() + t);
break;
case "month":
a.setMonth(a.getMonth() + t);
break;
case "day":
a.setDate(a.getDate() + t);
break;
}
return new d(a);
}
subtract(t, e) {
return this.add(-t, e);
}
format(t) {
const e = {
YYYY: this._date.getFullYear(),
MM: (this._date.getMonth() + 1).toString().padStart(2, "0"),
DD: this._date.getDate().toString().padStart(2, "0"),
HH: this._date.getHours().toString().padStart(2, "0"),
mm: this._date.getMinutes().toString().padStart(2, "0"),
ss: this._date.getSeconds().toString().padStart(2, "0"),
dddd: d.daysOfWeek[this._date.getDay()]
};
return t.replace(/YYYY|MM|DD|HH|mm|ss|dddd/g, (a) => e[a].toString());
}
year(t) {
if (t === void 0) return this._date.getFullYear();
const e = new Date(this._date);
return e.setFullYear(t), new d(e);
}
month(t) {
if (t === void 0) return this._date.getMonth();
const e = new Date(this._date);
return e.setMonth(t), new d(e);
}
date(t) {
if (t === void 0) return this._date.getDate();
const e = new Date(this._date);
return e.setDate(t), new d(e);
}
day(t) {
if (t === void 0)
return this._date.getDay();
{
const e = this._date.getDay(), a = t - e, s = new Date(this._date);
return s.setDate(this._date.getDate() + a), new d(s);
}
}
isBefore(t) {
const e = new d(t).toDate();
return this._date.getTime() < e.getTime();
}
isAfter(t) {
const e = new d(t).toDate();
return this._date.getTime() > e.getTime();
}
isSame(t, e = "day") {
const a = new d(t).toDate();
switch (e) {
case "year":
return this._date.getFullYear() === a.getFullYear();
case "month":
return this._date.getFullYear() === a.getFullYear() && this._date.getMonth() === a.getMonth();
case "day":
default:
return this._date.getFullYear() === a.getFullYear() && this._date.getMonth() === a.getMonth() && this._date.getDate() === a.getDate();
}
}
isBetween(t, e, a) {
const s = new d(t).startOf(a).toDate(), i = new d(e).endOf(a).toDate(), o = this.toDate();
return o >= s && o <= i;
}
};
c(d, "daysOfWeek", [
"Sunday",
"Monday",
"Tuesday",
"Wednesday",
"Thursday",
"Friday",
"Saturday"
]);
let M = d;
const h = (r) => new M(r), w = (r) => h(r).startOf("day"), D = (r, t) => {
r = w(r), t = w(t);
const e = t.diff(r, "day");
return Array.from({ length: e + 1 }, (a, s) => r.add(s, "day"));
}, A = {
// 1999 元旦 1 天、春节、劳动节、国庆节放假 3天
1999: {
"New Year's Day,元旦": 1,
"Spring Festival,春节": 3,
"Labour Day,劳动节": 3,
"National Day,国庆节": 3
},
// 2008 劳动节改为 1 天,增加清明、端午、中秋各 1 天
2008: {
"Tomb-sweeping Day,清明": 1,
"Labour Day,劳动节": 1,
"Dragon Boat Festival,端午": 1,
"Mid-autumn Festival,中秋": 1
},
// 2014 春节剔除除夕,改为初一、二、三,依旧 3 天
// 2015 增加 中国人民抗日战争暨世界反法西斯战争胜利70周年纪念日 1 天
2015: {
"Anti-Fascist 70th Day,中国人民抗日战争暨世界反法西斯战争胜利70周年纪念日": 1
},
// 2025 春节和劳动节 各增加 1 天
2025: {
"Spring Festival,春节": 4,
"Labour Day,劳动节": 2
}
};
class C {
constructor() {
c(this, "dayDetails", {});
c(this, "holidays", {});
c(this, "workdays", {});
c(this, "inLieuDays", {});
}
/** year at */
y(t) {
return this.dayDetails.year = t, this;
}
/** 查询某年 节假日天数 */
getHolidayDays(t, e) {
let a = 0;
for (const [s, i] of Object.entries(A)) {
if (parseInt(s) > t) break;
i[e] !== void 0 && (a = i[e]);
}
return a;
}
mark(t) {
return this.dayDetails.holiday = t, this;
}
save(t, e, a) {
if (!this.dayDetails.year)
throw new Error("should set year before saving holiday");
if (!this.dayDetails.holiday)
throw new Error("should set holiday before saving holiday");
this.dayDetails.month = t, this.dayDetails.day = e, this.dayDetails.dayType = a;
const s = h(`${this.dayDetails.year}-${t}-${e}`).format("YYYY-MM-DD"), i = this.getHolidayDays(this.dayDetails.year, this.dayDetails.holiday), o = `${this.dayDetails.holiday},${i}`;
return a === 2 ? this.holidays[s] = o : a === 1 ? this.workdays[s] = o : a === 3 && (this.inLieuDays[s] = o), this;
}
to(t, e) {
if (!this.dayDetails.holiday || !this.dayDetails.year || !this.dayDetails.month || !this.dayDetails.day)
throw new Error("should set year/month/day before saving holiday range");
const a = h(
`${this.dayDetails.year}-${this.dayDetails.month}-${this.dayDetails.day}`
), s = h(`${this.dayDetails.year}-${t}-${e}`);
if (s.isBefore(a) || s.isSame(a))
throw new Error("end date should be after start date");
const i = this.getHolidayDays(this.dayDetails.year, this.dayDetails.holiday), o = `${this.dayDetails.holiday},${i}`, l = s.diff(a, "day");
for (let n = 1; n <= l; n++) {
const _ = a.add(n, "day").format("YYYY-MM-DD");
this.dayDetails.dayType === 2 ? this.holidays[_] = o : this.dayDetails.dayType === 1 ? this.workdays[_] = o : this.dayDetails.dayType === 3 && (this.inLieuDays[_] = o);
}
return this;
}
/** work day */
w(t, e) {
return this.save(
t,
e,
1
/* Workday */
);
}
/** rest */
r(t, e) {
return this.save(
t,
e,
2
/* Holiday */
);
}
/** in-lieu */
i(t, e) {
return this.save(
t,
e,
3
/* InLieu */
);
}
/** New Year's Day 元旦 */
ny() {
return this.mark(
"New Year's Day,元旦"
/* NY */
);
}
/** Spring Festival 春节 */
s() {
return this.mark(
"Spring Festival,春节"
/* S */
);
}
/** Tomb-sweeping Day 清明 */
t() {
return this.mark(
"Tomb-sweeping Day,清明"
/* T */
);
}
/** Labour Day 五一 */
l() {
return this.mark(
"Labour Day,劳动节"
/* L */
);
}
/** Dragon Boat Festival 端午 */
d() {
return this.mark(
"Dragon Boat Festival,端午"
/* D */
);
}
/** National Day 国庆节 */
n() {
return this.mark(
"National Day,国庆节"
/* N */
);
}
/** Mid-autumn Festival 中秋 */
m() {
return this.mark(
"Mid-autumn Festival,中秋"
/* M */
);
}
/** Anti-Fascist 70th Day 中国人民抗日战争暨世界反法西斯战争胜利70周年纪念日 */
a() {
return this.mark(
"Anti-Fascist 70th Day,中国人民抗日战争暨世界反法西斯战争胜利70周年纪念日"
/* A */
);
}
}
const j = () => {
const r = new C();
return r.y(2025).ny().r(1, 1).s().r(1, 28).to(2, 4).w(1, 26).w(2, 8).i(2, 3).i(2, 4).t().r(4, 4).to(4, 6).l().r(5, 1).to(5, 5).w(4, 27).i(5, 5).d().r(5, 31).to(6, 2).n().r(10, 1).to(10, 8).w(9, 28).w(10, 11).i(10, 7).i(10, 8).m().r(10, 6), r.y(2024).ny().r(1, 1).s().r(2, 10).to(2, 17).w(2, 4).w(2, 18).i(2, 15).to(2, 16).t().r(4, 4).to(4, 6).w(4, 7).i(4, 5).l().r(5, 1).to(5, 5).w(4, 28).w(5, 11).i(5, 2).to(5, 3).d().r(6, 10).m().r(9, 15).to(9, 17).w(9, 14).i(9, 16).n().r(10, 1).to(10, 7).w(9, 29).w(10, 12).i(10, 4).i(10, 7), r.y(2023).ny().r(1, 1).to(1, 2).s().r(1, 21).to(1, 27).w(1, 28).to(1, 29).i(1, 26).to(1, 27).t().r(4, 5).l().r(4, 29).to(5, 3).w(4, 23).w(5, 6).i(5, 2).to(5, 3).d().r(6, 22).to(6, 24).w(6, 25).i(6, 23).m().r(9, 29).n().r(9, 30).to(10, 6).w(10, 7).to(10, 8).i(10, 5).to(10, 6), r.y(2022).ny().r(1, 1).to(1, 3).s().r(1, 31).to(2, 6).w(1, 29).w(1, 30).i(2, 3).to(2, 4).t().r(4, 3).to(4, 5).w(4, 2).i(4, 4).l().r(4, 30).to(5, 4).w(4, 24).w(5, 7).i(5, 3).to(5, 4).d().r(6, 3).to(6, 5).m().r(9, 10).to(9, 12).n().r(10, 1).to(10, 7).w(10, 8).w(10, 9).i(10, 6).to(10, 7).ny().r(12, 31), r.y(2021).ny().r(1, 1).to(1, 3).s().r(2, 11).to(2, 17).w(2, 7).w(2, 20).i(2, 16).to(2, 17).t().r(4, 3).to(4, 5).l().r(5, 1).to(5, 5).w(4, 25).w(5, 8).i(5, 4).to(5, 5).d().r(6, 12).to(6, 14).m().r(9, 19).to(9, 21).w(9, 18).i(9, 20).n().r(10, 1).to(10, 7).w(9, 26).w(10, 9).i(10, 6).to(10, 7), r.y(2020).ny().r(1, 1).s().r(1, 24).to(2, 2).w(1, 19).i(1, 29).t().r(4, 4).to(4, 6).l().r(5, 1).to(5, 5).w(4, 26).w(5, 9).i(5, 4).to(5, 5).d().r(6, 25).to(6, 27).w(6, 28).i(6, 26).n().r(10, 1).to(10, 8).w(9, 27).w(10, 10).i(10, 7).to(10, 8), r.y(2019).ny().r(1, 1).s().r(2, 4).to(2, 10).w(2, 2).to(2, 3).i(2, 4).i(2, 8).t().r(4, 5).to(4, 7).l().r(5, 1).to(5, 4).w(4, 28).w(5, 5).i(5, 2).i(5, 3).d().r(6, 7).to(6, 9).m().r(9, 13).to(9, 15).n().r(10, 1).to(10, 7).w(9, 29).w(10, 12).i(10, 4).i(10, 7), r.y(2018).ny().r(1, 1).s().r(2, 15).to(2, 21).w(2, 11).w(2, 24).i(2, 19).to(2, 21).t().r(4, 5).to(4, 7).w(4, 8).i(4, 6).l().r(4, 29).to(5, 1).w(4, 28).i(4, 30).d().r(6, 18).n().r(10, 1).to(10, 7).w(9, 29).to(9, 30).i(10, 4).to(10, 5).m().r(9, 24).ny().r(12, 30).to(12, 31).w(12, 29).i(12, 31), r.y(2017).ny().r(1, 1).to(1, 2).s().r(1, 27).to(2, 2).w(1, 22).w(2, 4).i(2, 1).to(2, 2).t().r(4, 2).to(4, 4).w(4, 1).i(4, 3).l().r(5, 1).d().r(5, 28).to(5, 30).w(5, 27).i(5, 29).n().r(10, 1).to(10, 8).w(9, 30).i(10, 6).m().r(10, 4), r.y(2016).ny().r(1, 1).s().r(2, 7).to(2, 13).w(2, 6).w(2, 14).i(2, 11).to(2, 12).t().r(4, 4).l().r(5, 1).to(5, 2).d().r(6, 9).to(6, 11).w(6, 12).i(6, 10).m().r(9, 15).to(9, 17).w(9, 18).i(9, 16).n().r(10, 1).to(10, 7).w(10, 8).to(10, 9).i(10, 6).to(10, 7), r.y(2015).ny().r(1, 1).to(1, 3).w(1, 4).i(1, 2).s().r(2, 18).to(2, 24).w(2, 15).w(2, 28).i(2, 23).to(2, 24).t().r(4, 5).to(4, 6).l().r(5, 1).d().r(6, 20).r(6, 22).m().r(9, 27).n().r(10, 1).to(10, 7).w(10, 10).i(10, 7).a().r(9, 3).to(9, 4).w(9, 6).i(9, 4), r.y(2014).ny().r(1, 1).s().r(1, 31).to(2, 6).w(1, 26).w(2, 8).i(2, 5).to(2, 6).t().r(4, 5).to(4, 7).l().r(5, 1).to(5, 3).w(5, 4).i(5, 2).d().r(6, 2).m().r(9, 8).n().r(10, 1).to(10, 7).w(9, 28).w(10, 11).i(10, 6).to(10, 7), r.y(2013).ny().r(1, 1).to(1, 3).w(1, 5).to(1, 6).i(1, 2).to(1, 3).s().r(2, 9).to(2, 15).w(2, 16).to(2, 17).i(2, 14).to(2, 15).t().r(4, 4).to(4, 6).w(4, 7).i(4, 5).l().r(4, 29).to(5, 1).w(4, 27).to(4, 28).i(4, 29).to(4, 30).d().r(6, 10).to(6, 12).w(6, 8).to(6, 9).i(6, 10).to(6, 11).m().r(9, 19).to(9, 21).w(9, 22).i(9, 20).n().r(10, 1).to(10, 7).w(9, 29).w(10, 12).i(10, 4).i(10, 7), r.y(2012).ny().r(1, 1).to(1, 3).i(1, 3).s().r(1, 22).to(1, 28).w(1, 21).w(1, 29).i(1, 26).to(1, 27).t().r(4, 2).to(4, 4).w(3, 31).w(4, 1).i(4, 2).to(4, 3).l().r(4, 29).to(5, 1).w(4, 28).i(4, 30).d().r(6, 22).r(6, 24).m().r(9, 30).n().r(10, 1).to(10, 7).w(9, 29).i(10, 5), r.y(2011).ny().r(1, 1).to(1, 3).s().r(2, 2).to(2, 8).w(1, 30).w(2, 12).i(2, 7).to(2, 8).t().r(4, 3).to(4, 5).w(4, 2).i(4, 4).l().r(4, 30).to(5, 2).d().r(6, 4).r(6, 6).m().r(9, 10).to(9, 12).n().r(10, 1).to(10, 7).w(10, 8).to(10, 9).i(10, 6).to(10, 7).ny().w(12, 31), r.y(2010).ny().r(1, 1).to(1, 3).s().r(2, 13).to(2, 19).w(2, 20).to(2, 21).i(2, 18).to(2, 19).t().r(4, 3).to(4, 5).l().r(5, 1).to(5, 3).d().r(6, 14).to(6, 16).w(6, 12).to(6, 13).i(6, 14).to(6, 15).m().r(9, 22).to(9, 24).w(9, 19).w(9, 25).i(9, 23).to(9, 24).n().r(10, 1).to(10, 7).w(9, 26).w(10, 9).i(10, 6).to(10, 7), r.y(2009).ny().r(1, 1).to(1, 3).w(1, 4).i(1, 2).s().r(1, 25).to(1, 31).w(1, 24).w(2, 1).i(1, 29).to(1, 30).t().r(4, 4).to(4, 6).l().r(5, 1).to(5, 3).d().r(5, 28).to(5, 30).w(5, 31).i(5, 29).n().r(10, 1).to(10, 8).w(9, 27).w(10, 10).i(10, 7).to(10, 8).m().r(10, 3), r.y(2008).ny().r(1, 1).s().r(2, 6).to(2, 12).w(2, 2).to(2, 3).i(2, 11).to(2, 12).t().r(4, 4).to(4, 6).l().r(5, 1).to(5, 3).w(5, 4).i(5, 2).d().r(6, 7).to(6, 9).m().r(9, 13).to(9, 15).n().r(9, 29).to(10, 5).w(9, 27).to(9, 28).i(9, 29).to(9, 30), r.y(2007).ny().r(1, 1).to(1, 3).i(1, 2).to(1, 3).s().r(2, 18).to(2, 24).w(2, 17).w(2, 25).i(2, 22).to(2, 23).l().r(5, 1).to(5, 7).w(4, 28).to(4, 29).i(5, 4).i(5, 7).n().r(10, 1).to(10, 7).w(9, 29).to(9, 30).i(10, 4).to(10, 5).ny().r(12, 30).to(12, 31).w(12, 29).i(12, 31), r.y(2006).ny().r(1, 1).to(1, 3).s().r(1, 29).to(2, 4).w(1, 28).w(2, 5).i(2, 2).to(2, 3).l().r(5, 1).to(5, 7).w(4, 29).to(4, 30).i(5, 4).to(5, 5).n().r(10, 1).to(10, 7).w(9, 30).w(10, 8).i(10, 5).to(10, 6).ny().w(12, 30).to(12, 31), r.y(2005).ny().r(1, 1).to(1, 3).s().r(2, 9).to(2, 15).w(2, 5).to(2, 6).i(2, 14).to(2, 15).l().r(5, 1).to(5, 7).w(4, 30).w(5, 8).i(5, 5).to(5, 6).n().r(10, 1).to(10, 7).w(10, 8).to(10, 9).i(10, 6).to(10, 7), r.y(2004).ny().r(1, 1).s().r(1, 22).to(1, 28).w(1, 17).to(1, 18).i(1, 27).to(1, 28).l().r(5, 1).to(5, 7).w(5, 8).to(5, 9).i(5, 6).to(5, 7).n().r(10, 1).to(10, 7).w(10, 9).to(10, 10).i(10, 6).to(10, 7), {
holidays: r.holidays,
workdays: r.workdays,
inLieuDays: r.inLieuDays
};
}, { holidays: g, workdays: p, inLieuDays: I } = j(), u = (...r) => {
if (r.length !== 1)
return r.map((e) => u(e));
const t = w(r[0]);
if (!t.isValid())
throw new Error(`unsupported type ${typeof t}, expected type is Date or Dayjs`);
return t;
}, N = (r) => !f(r), f = (r) => {
const t = u(r), e = t.day(), a = t.format("YYYY-MM-DD");
return !!(p[a] || e >= 1 && e <= 5 && !g[a]);
}, q = (r) => (r = u(r), !!I[r.format("YYYY-MM-DD")]), U = (r) => {
r = u(r);
const t = r.format("YYYY-MM-DD");
if (p[t])
return {
date: t,
work: !0,
name: p[t]
};
if (g[t])
return {
date: t,
work: !1,
name: g[t]
};
{
const e = r.day();
return {
date: t,
work: e !== 0 && e !== 6,
name: r.format("dddd")
};
}
}, W = (r, t, e = !0) => (r = u(r), t = u(t), e ? D(r, t).filter(N).map((a) => a.format("YYYY-MM-DD")) : D(r, t).filter((a) => g[a.format("YYYY-MM-DD")]).map((a) => a.format("YYYY-MM-DD"))), P = (r, t, e = !0) => (r = u(r), t = u(t), e ? D(r, t).filter(f).map((a) => a.format("YYYY-MM-DD")) : D(r, t).filter((a) => f(a) && a.day() >= 1 && a.day() <= 5).map((a) => a.format("YYYY-MM-DD"))), z = (r = 0, t = h()) => {
if (t = w(t), r === 0) {
if (f(t))
return t.format("YYYY-MM-DD");
r = 1;
}
const e = r > 0 ? 1 : -1;
let a = Math.abs(r);
for (; a > 0; )
t = t.add(e, "day"), f(t) && a--;
return t.format("YYYY-MM-DD");
}, V = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
__proto__: null,
findWorkday: z,
getDayDetail: U,
getHolidaysInRange: W,
getWorkdaysInRange: P,
isHoliday: N,
isInLieu: q,
isWorkday: f
}, Symbol.toStringTag, { value: "Module" })), Z = {
the_beginning_of_spring: [4.6295, 3.87],
rain_water: [19.4599, 18.73],
the_waking_of_insects: [6.3926, 5.63],
the_spring_equinox: [21.4155, 20.646],
pure_brightness: [5.59, 4.81],
grain_rain: [20.888, 20.1],
the_beginning_of_summer: [6.318, 5.52],
lesser_fullness_of_grain: [21.86, 21.04],
grain_in_beard: [6.5, 5.678],
the_summer_solstice: [22.2, 21.37],
lesser_heat: [7.928, 7.108],
greater_heat: [23.65, 22.83],
the_beginning_of_autumn: [28.35, 7.5],
the_end_of_heat: [23.95, 23.13],
white_dew: [8.44, 7.646],
the_autumn_equinox: [23.822, 23.042],
code_dew: [9.098, 8.318],
frost_descent: [24.218, 23.438],
the_beginning_of_winter: [8.218, 7.438],
lesser_snow: [23.08, 22.36],
greater_snow: [7.9, 7.18],
the_winter_solstice: [22.6, 21.94],
lesser_cold: [6.11, 5.4055],
greater_cold: [20.84, 20.12]
}, T = {
1: ["lesser_cold", "greater_cold"],
2: ["the_beginning_of_spring", "rain_water"],
3: ["the_waking_of_insects", "the_spring_equinox"],
4: ["pure_brightness", "grain_rain"],
5: ["the_beginning_of_summer", "lesser_fullness_of_grain"],
6: ["grain_in_beard", "the_summer_solstice"],
7: ["lesser_heat", "greater_heat"],
8: ["the_beginning_of_autumn", "the_end_of_heat"],
9: ["white_dew", "the_autumn_equinox"],
10: ["code_dew", "frost_descent"],
11: ["the_beginning_of_winter", "lesser_snow"],
12: ["greater_snow", "the_winter_solstice"]
}, G = {
"2026_rain_water": -1,
"2084_the_spring_equinox": 1,
"1911_the_beginning_of_summer": 1,
"2008_lesser_fullness_of_grain": 1,
"1902_grain_in_beard": 1,
"1928_the_summer_solstice": 1,
"1925_lesser_heat": 1,
"2016_lesser_heat": 1,
"1922_greater_heat": 1,
"2002_the_beginning_of_autumn": 1,
"1927_white_dew": 1,
"1942_the_autumn_equinox": 1,
"2089_frost_descent": 1,
"2089_the_beginning_of_winter": 1,
"1978_lesser_snow": 1,
"1954_greater_snow": 1,
"1918_the_winter_solstice": -1,
"2021_the_winter_solstice": -1,
"1982_lesser_cold": 1,
"2019_lesser_cold": -1,
"2000_greater_cold": 1,
"2082_greater_cold": 1
}, v = {
lesser_cold: "小寒",
greater_cold: "大寒",
the_beginning_of_spring: "立春",
rain_water: "雨水",
the_waking_of_insects: "惊蛰",
the_spring_equinox: "春分",
pure_brightness: "清明",
grain_rain: "谷雨",
the_beginning_of_summer: "立夏",
lesser_fullness_of_grain: "小满",
grain_in_beard: "芒种",
the_summer_solstice: "夏至",
lesser_heat: "小暑",
greater_heat: "大暑",
the_beginning_of_autumn: "立秋",
the_end_of_heat: "处暑",
white_dew: "白露",
the_autumn_equinox: "秋分",
code_dew: "寒露",
frost_descent: "霜降",
the_beginning_of_winter: "立冬",
lesser_snow: "小雪",
greater_snow: "大雪",
the_winter_solstice: "冬至"
}, S = (r, t, e) => {
const a = r >= 2e3 ? 21 : 20, s = r % 100, i = 0.2422, o = Z[e][a === 21 ? 1 : 0];
let l = Math.floor(s / 4);
[
"lesser_cold",
"greater_cold",
"the_beginning_of_spring",
"rain_water"
].includes(e) && (l = Math.floor((s - 1) / 4));
let n = Math.floor(s * i + o) - l;
const _ = G[`${r}_${e}`];
return _ && (n += _), h(`${r}-${t}-${n}`).format("YYYY-MM-DD");
}, J = (r, t) => {
const e = [];
let a = w(r);
const s = w(t || r);
for (; a.isBefore(s) || a.isSame(s); ) {
const i = a.year(), o = a.month() + 1;
T[o].forEach((l) => {
const n = h(S(i, o, l));
(n != null && n.isBefore(s) || n != null && n.isSame(s)) && (n != null && n.isAfter(a) || n != null && n.isSame(a)) && e.push({
date: n.format("YYYY-MM-DD"),
term: l,
name: v[l],
index: 1
});
}), o === 12 ? a = a.add(1, "year").startOf("year") : a = a.add(1, "month").startOf("month");
}
return e;
}, K = (r, t) => {
let e = w(r).subtract(1, "month");
const a = w(t || r).add(1, "month"), s = [];
for (; e.isBefore(a) || e.isSame(a); ) {
const o = e.year(), l = e.month() + 1;
T[l].forEach((n) => {
const _ = h(S(o, l, n));
s.push({ term: n, date: _ });
}), e.month() === 11 ? e = e.add(1, "year").startOf("year") : e = e.add(1, "month").startOf("month");
}
const i = [];
return s.forEach((o, l) => {
for (let n = o.date; s[l + 1] && n.isBefore(s[l + 1].date); n = n.add(1, "day"))
i.push({ day: n, term: o.term, name: v[o.term], index: n.diff(o.date, "day") + 1 });
}), t || (t = r), i.filter((o) => o.day.isBetween(r, t, "day")).map((o) => ({
date: o.day.format("YYYY-MM-DD"),
term: o.term,
name: o.name,
index: o.index
}));
}, Q = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
__proto__: null,
getSolarTermDate: S,
getSolarTerms: J,
getSolarTermsInRange: K
}, Symbol.toStringTag, { value: "Module" })), m = [
19416,
19168,
42352,
21717,
53856,
55632,
91476,
22176,
39632,
21970,
//1900-1909
19168,
42422,
42192,
53840,
119381,
46400,
54944,
44450,
38320,
84343,
//1910-1919
18800,
42160,
46261,
27216,
27968,
109396,
11104,
38256,
21234,
18800,
//1920-1929
25958,
54432,
59984,
28309,
23248,
11104,
100067,
37600,
116951,
51536,
//1930-1939
54432,
120998,
46416,
22176,
107956,
9680,
37584,
53938,
43344,
46423,
//1940-1949
27808,
46416,
86869,
19872,
42416,
83315,
21168,
43432,
59728,
27296,
//1950-1959
44710,
43856,
19296,
43748,
42352,
21088,
62051,
55632,
23383,
22176,
//1960-1969
38608,
19925,
19152,
42192,
54484,
53840,
54616,
46400,
46752,
103846,
//1970-1979
38320,
18864,
43380,
42160,
45690,
27216,
27968,
44870,
43872,
38256,
//1980-1989
19189,
18800,
25776,
29859,
59984,
27480,
21952,
43872,
38613,
37600,
//1990-1999
51552,
55636,
54432,
55888,
30034,
22176,
43959,
9680,
37584,
51893,
//2000-2009
43344,
46240,
47780,
44368,
21977,
19360,
42416,
86390,
21168,
43312,
//2010-2019
31060,
27296,
44368,
23378,
19296,
42726,
42208,
53856,
60005,
54576,
//2020-2029
23200,
30371,
38608,
19195,
19152,
42192,
118966,
53840,
54560,
56645,
//2030-2039
46496,
22224,
21938,
18864,
42359,
42160,
43600,
111189,
27936,
44448,
//2040-2049
84835,
37744,
18936,
18800,
25776,
92326,
59984,
27424,
108228,
43744,
//2050-2059
41696,
53987,
51552,
54615,
54432,
55888,
23893,
22176,
42704,
21972,
//2060-2069
21200,
43448,
43344,
46240,
46758,
44368,
21920,
43940,
42416,
21168,
//2070-2079
45683,
26928,
29495,
27296,
44368,
84821,
19296,
42352,
21732,
53600,
//2080-2089
59752,
54560,
55968,
92838,
22224,
19168,
43476,
41680,
53584,
62034,
//2090-2099
54560
//2100
], $ = ["零", "一", "二", "三", "四", "五", "六", "七", "八", "九"], X = ["正", "二", "三", "四", "五", "六", "七", "八", "九", "十", "冬", "腊"], tt = ["甲", "乙", "丙", "丁", "戊", "己", "庚", "辛", "壬", "癸"], et = ["子", "丑", "寅", "卯", "辰", "巳", "午", "未", "申", "酉", "戌", "亥"], rt = ["鼠", "牛", "虎", "兔", "龙", "蛇", "马", "羊", "猴", "鸡", "狗", "猪"], H = (r) => {
let t = 348;
for (let e = 32768; e > 8; e >>= 1)
t += m[r - 1900] & e ? 1 : 0;
return t + F(r);
}, k = (r) => m[r - 1900] & 15, F = (r) => k(r) ? m[r - 1900] & 65536 ? 30 : 29 : 0, Y = (r) => tt[r % 10] + et[r % 12], b = (r, t) => m[r - 1900] & 65536 >> t ? 30 : 29, at = (r) => rt[(r - 4) % 12], ot = (r) => {
const t = ["初", "十", "廿", "三十"];
if (r === 10) return "初十";
if (r === 20) return "二十";
if (r === 30) return "三十";
const e = Math.floor(r / 10), a = r % 10;
return t[e] + (a ? $[a] : "");
}, O = (r) => {
const t = new Array(7).fill(0);
let e = 0, a = 0;
const s = h(new Date(1900, 0, 31)), i = h(r);
let o = i.diff(s, "day");
t[5] = o + 40, t[4] = 14;
let l = 1900;
for (; l < 2100 && o > 0; l++)
e = H(l), o -= e, t[4] += 12;
o < 0 && (o += e, l--, t[4] -= 12), t[0] = l, t[3] = l - 1864, a = k(l), t[6] = 0;
for (let n = 1; n < 13 && o >= 0; n++)
a > 0 && n === a + 1 && t[6] === 0 ? (--n, t[6] = 1, e = F(l)) : e = b(l, n), t[6] === 1 && n === a + 1 && (t[6] = 0), o -= e, t[6] === 0 && t[4]++, t[1] = n;
return o === 0 && a > 0 && t[6] === 1 ? t[6] = 0 : o < 0 && (o += e, t[1]--, t[4]--), t[2] = o + 1, {
date: i.format("YYYY-MM-DD"),
// 公历日期
lunarYear: t[0],
// 农历年份
lunarMon: t[1] + 1,
// 农历月份
lunarDay: t[2],
// 农历日期
isLeap: !!t[6],
// 是否闰月
zodiac: at(t[0]),
// 生肖
yearCyl: Y(t[3]),
// 年柱
monCyl: Y(t[4]),
// 月柱
dayCyl: Y(t[5]),
// 日柱
lunarYearCN: `${t[0].toString().split("").map((n) => $[Number(n)]).join("")}`,
// 农历年份中文表示
lunarMonCN: `${X[t[1]]}月`,
// 农历月份中文表示
lunarDayCN: ot(t[2])
// 农历日期中文表示
};
}, E = (r, t) => {
const e = h(r), a = h(t), s = [];
for (let i = e; i.isBefore(a) || i.isSame(a, "day"); i = i.add(1, "day"))
s.push(O(i));
return s;
}, R = (r) => {
const t = h(r), e = t.year(), a = t.month() + 1, s = t.date();
let i = 0;
for (let y = 1900; y < e; y++)
i += H(y);
let o = k(e);
for (let y = 1; y < a; y++)
i += b(e, y), y === o && (i += F(e));
i += s - 1;
const l = h(new Date(1900, 0, 31)), n = l.add(i, "day").format("YYYY-MM-DD");
let _ = i, L;
return o === a && (_ += b(e, a), L = l.add(_, "day").format("YYYY-MM-DD")), {
date: n,
leapMonthDate: L
};
}, nt = {
getLunarDate: O,
getLunarDatesInRange: E,
getSolarDateFromLunar: R
}, st = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
__proto__: null,
default: nt,
getLunarDate: O,
getLunarDatesInRange: E,
getSolarDateFromLunar: R
}, Symbol.toStringTag, { value: "Module" })), lt = {
...V,
...Q,
...st
};
export {
lt as default,
z as findWorkday,
U as getDayDetail,
W as getHolidaysInRange,
O as getLunarDate,
E as getLunarDatesInRange,
R as getSolarDateFromLunar,
S as getSolarTermDate,
J as getSolarTerms,
K as getSolarTermsInRange,
P as getWorkdaysInRange,
N as isHoliday,
q as isInLieu,
f as isWorkday
};