chinese-days
Version:
中国节假日、调休日、工作日、24节气查询,农历阳历互转,支持 TS、CommonJS、UMD 模块化使用,提供 ics 日历格式,可供 Google Calendar、Apple Calendar、Microsoft Outlook 等客户端订阅。
994 lines (993 loc) • 31 kB
JavaScript
var P = Object.defineProperty;
var U = (r, t, e) => t in r ? P(r, t, { enumerable: !0, configurable: !0, writable: !0, value: e }) : r[t] = e;
var w = (r, t, e) => U(r, typeof t != "symbol" ? t + "" : t, e);
const l = class l {
constructor(t) {
w(this, "_date");
t instanceof l ? 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 l(t).toDate(), o = 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(o / (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 l(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 l(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 l(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: l.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 l(e);
}
month(t) {
if (t === void 0) return this._date.getMonth();
const e = new Date(this._date);
return e.setMonth(t), new l(e);
}
date(t) {
if (t === void 0) return this._date.getDate();
const e = new Date(this._date);
return e.setDate(t), new l(e);
}
day(t) {
if (t === void 0)
return this._date.getDay();
{
const e = this._date.getDay(), a = t - e, o = new Date(this._date);
return o.setDate(this._date.getDate() + a), new l(o);
}
}
isBefore(t) {
const e = new l(t).toDate();
return this._date.getTime() < e.getTime();
}
isAfter(t) {
const e = new l(t).toDate();
return this._date.getTime() > e.getTime();
}
isSame(t, e = "day") {
const a = new l(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 o = new l(t).startOf(a).toDate(), s = new l(e).endOf(a).toDate(), n = this.toDate();
return n >= o && n <= s;
}
};
w(l, "daysOfWeek", [
"Sunday",
"Monday",
"Tuesday",
"Wednesday",
"Thursday",
"Friday",
"Saturday"
]);
let S = l;
const h = (r) => new S(r), u = (r) => h(r).startOf("day"), Y = (r, t) => {
r = u(r), t = u(t);
const e = t.diff(r, "day");
return Array.from({ length: e + 1 }, (a, o) => r.add(o, "day"));
}, W = {
// 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 z {
constructor() {
w(this, "dayDetails", {});
w(this, "holidays", {});
w(this, "workdays", {});
w(this, "inLieuDays", {});
}
/** year at */
y(t) {
return this.dayDetails.year = t, this;
}
/** 查询某年 节假日天数 */
getHolidayDays(t, e) {
let a = 0;
for (const [o, s] of Object.entries(W)) {
if (parseInt(o) > t) break;
s[e] !== void 0 && (a = s[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 o = h(`${this.dayDetails.year}-${t}-${e}`).format("YYYY-MM-DD"), s = this.getHolidayDays(this.dayDetails.year, this.dayDetails.holiday), n = `${this.dayDetails.holiday},${s}`;
return a === 2 ? this.holidays[o] = n : a === 1 ? this.workdays[o] = n : a === 3 && (this.inLieuDays[o] = n), 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}`
), o = h(`${this.dayDetails.year}-${t}-${e}`);
if (o.isBefore(a) || o.isSame(a))
throw new Error("end date should be after start date");
const s = this.getHolidayDays(this.dayDetails.year, this.dayDetails.holiday), n = `${this.dayDetails.holiday},${s}`, d = o.diff(a, "day");
for (let i = 1; i <= d; i++) {
const _ = a.add(i, "day").format("YYYY-MM-DD");
this.dayDetails.dayType === 2 ? this.holidays[_] = n : this.dayDetails.dayType === 1 ? this.workdays[_] = n : this.dayDetails.dayType === 3 && (this.inLieuDays[_] = n);
}
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 V = () => {
const r = new z();
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: M, workdays: k, inLieuDays: Z } = V(), c = (r) => {
const t = u(r);
if (!t.isValid())
throw new Error(`unsupported type ${typeof r}, expected type is Date or Dayjs`);
return t;
}, O = (r) => !f(r), f = (r) => {
const t = c(r), e = t.day(), a = t.format("YYYY-MM-DD");
return !!(k[a] || e >= 1 && e <= 5 && !M[a]);
}, G = (r) => {
const t = c(r);
return !!Z[t.format("YYYY-MM-DD")];
}, J = (r) => {
const t = c(r), e = t.format("YYYY-MM-DD");
if (k[e])
return {
date: e,
work: !0,
name: k[e]
};
if (M[e])
return {
date: e,
work: !1,
name: M[e]
};
{
const a = t.day();
return {
date: e,
work: a !== 0 && a !== 6,
name: t.format("dddd")
};
}
}, K = (r, t, e = !0) => {
const a = c(r), o = c(t);
return e ? Y(a, o).filter(O).map((s) => s.format("YYYY-MM-DD")) : Y(a, o).filter((s) => M[s.format("YYYY-MM-DD")]).map((s) => s.format("YYYY-MM-DD"));
}, Q = (r, t, e = !0) => {
const a = c(r), o = c(t);
return e ? Y(a, o).filter(f).map((s) => s.format("YYYY-MM-DD")) : Y(a, o).filter((s) => f(s) && s.day() >= 1 && s.day() <= 5).map((s) => s.format("YYYY-MM-DD"));
}, X = (r = 0, t = h()) => {
if (t = u(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");
}, tt = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
__proto__: null,
findWorkday: X,
getDayDetail: J,
getHolidaysInRange: K,
getWorkdaysInRange: Q,
isHoliday: O,
isInLieu: G,
isWorkday: f
}, Symbol.toStringTag, { value: "Module" })), et = {
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"]
}, rt = {
"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
}, E = {
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: "冬至"
}, L = (r, t, e) => {
const a = r >= 2e3 ? 21 : 20, o = r % 100, s = 0.2422, n = et[e][a === 21 ? 1 : 0];
let d = Math.floor(o / 4);
[
"lesser_cold",
"greater_cold",
"the_beginning_of_spring",
"rain_water"
].includes(e) && (d = Math.floor((o - 1) / 4));
let i = Math.floor(o * s + n) - d;
const _ = rt[`${r}_${e}`];
return _ && (i += _), h(`${r}-${t}-${i}`).format("YYYY-MM-DD");
}, at = (r, t) => {
const e = [];
let a = u(r);
const o = u(t || r);
for (; a.isBefore(o) || a.isSame(o); ) {
const s = a.year(), n = a.month() + 1;
T[n].forEach((d) => {
const i = h(L(s, n, d));
(i != null && i.isBefore(o) || i != null && i.isSame(o)) && (i != null && i.isAfter(a) || i != null && i.isSame(a)) && e.push({
date: i.format("YYYY-MM-DD"),
term: d,
name: E[d],
index: 1
});
}), n === 12 ? a = a.add(1, "year").startOf("year") : a = a.add(1, "month").startOf("month");
}
return e;
}, $ = (r, t) => {
let e = u(r).subtract(1, "month");
const a = u(t || r).add(1, "month"), o = [];
for (; e.isBefore(a) || e.isSame(a); ) {
const n = e.year(), d = e.month() + 1;
T[d].forEach((i) => {
const _ = h(L(n, d, i));
o.push({ term: i, date: _ });
}), e.month() === 11 ? e = e.add(1, "year").startOf("year") : e = e.add(1, "month").startOf("month");
}
const s = [];
return o.forEach((n, d) => {
for (let i = n.date; o[d + 1] && i.isBefore(o[d + 1].date); i = i.add(1, "day"))
s.push({ day: i, term: n.term, name: E[n.term], index: i.diff(n.date, "day") + 1 });
}), t || (t = r), s.filter((n) => n.day.isBetween(r, t, "day")).map((n) => ({
date: n.day.format("YYYY-MM-DD"),
term: n.term,
name: n.name,
index: n.index
}));
}, ot = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
__proto__: null,
getSolarTermDate: L,
getSolarTerms: at,
getSolarTermsInRange: $
}, Symbol.toStringTag, { value: "Module" })), g = [
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
], F = ["零", "一", "二", "三", "四", "五", "六", "七", "八", "九"], A = ["正", "二", "三", "四", "五", "六", "七", "八", "九", "十", "冬", "腊"], H = ["甲", "乙", "丙", "丁", "戊", "己", "庚", "辛", "壬", "癸"], B = ["子", "丑", "寅", "卯", "辰", "巳", "午", "未", "申", "酉", "戌", "亥"], nt = ["鼠", "牛", "虎", "兔", "龙", "蛇", "马", "羊", "猴", "鸡", "狗", "猪"], x = (r) => {
let t = 348;
for (let e = 32768; e > 8; e >>= 1)
t += g[r - 1900] & e ? 1 : 0;
return t + v(r);
}, p = (r) => g[r - 1900] & 15, v = (r) => p(r) ? g[r - 1900] & 65536 ? 30 : 29 : 0, b = (r) => H[r % 10] + B[r % 12], D = (r, t) => g[r - 1900] & 65536 >> t ? 30 : 29, st = (r) => nt[(r - 4) % 12], it = (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] + F[a];
}, dt = (r) => `${H[(r - 4) % 10]}${B[(r - 4) % 12]}年`, R = (r, t) => {
const e = [];
for (let a = r; a <= t; a++)
e.push({
year: a,
lunarYear: dt(a),
lunarYearCN: a.toString().split("").map((o) => F[Number(o)]).join("")
});
return e;
}, C = (r) => {
const t = p(r);
return {
year: r,
leapMonth: t || void 0,
leapMonthCN: t ? `闰${A[t - 1]}月` : void 0,
days: t ? g[r - 1900] & 65536 ? 30 : 29 : 0
};
}, m = (r) => {
const t = new Array(7).fill(0);
let e = 0, a = 0;
const o = h(new Date(1900, 0, 31)), s = h(r);
let n = s.diff(o, "day");
t[5] = n + 40, t[4] = 14;
let d = 1900;
for (; d < 2100 && n > 0; d++)
e = x(d), n -= e, t[4] += 12;
n < 0 && (n += e, d--, t[4] -= 12), t[0] = d, t[3] = d - 1864, a = p(d), t[6] = 0;
for (let i = 1; i < 13 && n >= 0; i++)
a > 0 && i === a + 1 && t[6] === 0 ? (--i, t[6] = 1, e = v(d)) : e = D(d, i), t[6] === 1 && i === a + 1 && (t[6] = 0), n -= e, t[6] === 0 && t[4]++, t[1] = i;
return n < 0 && (n += e, t[1]--, t[4]--), t[2] = n + 1, {
date: s.format("YYYY-MM-DD"),
// 公历日期
lunarYear: t[0],
// 农历年份
lunarMon: t[1] + 1,
// 农历月份
lunarDay: t[2],
// 农历日期
isLeap: !!t[6],
// 是否闰月
zodiac: st(t[0]),
// 生肖
yearCyl: b(t[3]),
// 年柱
monCyl: b(t[4]),
// 月柱
dayCyl: b(t[5]),
// 日柱
lunarYearCN: `${t[0].toString().split("").map((i) => F[Number(i)]).join("")}`,
// 农历年份中文表示
lunarMonCN: `${A[t[1]]}月`,
// 农历月份中文表示
lunarDayCN: it(t[2])
// 农历日期中文表示
};
}, j = (r, t) => {
const e = h(r), a = h(t), o = [];
for (let s = e; s.isBefore(a) || s.isSame(a, "day"); s = s.add(1, "day"))
o.push(m(s));
return o;
}, I = (r) => {
const t = h(r), e = t.year(), a = t.month() + 1, o = t.date();
let s = 0;
for (let y = 1900; y < e; y++)
s += x(y);
let n = p(e);
for (let y = 1; y < a; y++)
s += D(e, y), y === n && (s += v(e));
s += o - 1;
const d = h(new Date(1900, 0, 31)), i = d.add(s, "day").format("YYYY-MM-DD");
let _ = s, N;
return n === a && (_ += D(e, a), N = d.add(_, "day").format("YYYY-MM-DD")), {
date: i,
leapMonthDate: N
};
}, lt = {
getLunarYears: R,
getYearLeapMonth: C,
getLunarDate: m,
getLunarDatesInRange: j,
getSolarDateFromLunar: I
}, ht = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
__proto__: null,
default: lt,
getLunarDate: m,
getLunarDatesInRange: j,
getLunarYears: R,
getSolarDateFromLunar: I,
getYearLeapMonth: C,
monthDays: D
}, Symbol.toStringTag, { value: "Module" })), _t = {
1: {
// 正月
1: ["春节", "鸡日", "元始天尊诞辰"],
2: ["犬日"],
3: ["猪日", "小年朝"],
4: ["羊日", "孙天医诞辰"],
5: ["牛日", "破五日", "开市", "路神诞辰"],
6: ["马日"],
7: ["人日", "送火神"],
8: ["谷日", "阎王诞辰"],
9: ["天日", "玉皇诞辰"],
10: ["地日", "石头生日"],
13: ["上(试)灯日", "关公升天日"],
15: ["元宵节", "上元节", "正灯日", "天官诞辰"],
18: ["落灯日"],
25: ["天仓(填仓)节"]
},
2: {
// 二月
1: ["太阳生日"],
2: ["春龙节", "土地公生日", "济公活佛生日"],
3: ["文昌帝君诞辰"],
12: ["百花生日(花朝节)"],
15: ["九天玄女诞辰", "太上老君诞辰", "精忠岳王诞辰"],
19: ["观音菩萨诞辰"],
21: ["普贤菩萨诞辰"]
},
3: {
3: ["上巳节"],
15: ["赵公元帅诞辰", "泰山老母诞辰"]
},
4: {
1: ["祭雹神"],
4: ["文殊菩萨诞辰"],
8: ["浴佛节(龙华会)"],
12: ["蛇王诞辰"],
14: ["吕洞宾诞辰"],
18: ["华佗诞辰"],
28: ["药王(神农)诞辰"]
},
5: {
5: ["端午节"],
13: ["雨节", "黄帝诞辰"]
},
6: {
1: ["半年节"],
6: ["晒衣节"],
19: ["观音菩萨得道"],
24: ["雷神诞辰", "荷花生日", "关公诞辰"]
},
7: {
1: ["祭海神"],
7: ["乞巧节"],
15: ["中元(鬼)节", "地官诞辰(孟兰盆会)"],
18: ["西王母诞辰"],
20: ["棉花生日"],
23: ["诸葛亮诞辰"],
30: ["地藏菩萨诞辰"]
},
8: {
1: ["天医节"],
3: ["灶君生日"],
8: ["瑶池大会"],
15: ["中秋节"],
20: ["水稻生日"],
28: ["孔子诞辰"]
},
9: {
9: ["重阳节"],
19: ["观音菩萨出家"]
},
10: {
1: ["十月朝", "寒衣节"],
15: ["下元节", "水官诞辰"]
},
12: {
8: ["腊八节"],
23: ["官家送灶"],
24: ["民间送灶"],
25: ["接玉皇"]
}
}, yt = [
// 处理寒食节(清明前一日)
(r, t) => {
const e = r.add(1, "day");
$(e).find((o) => o.term === "pure_brightness") && t.push({
date: r.format("YYYY-MM-DD"),
name: "寒食节",
type: "solar_term"
});
},
// 处理除夕(农历腊月最后一日)
(r, t) => {
const e = m(r);
if (e.lunarMon === 12 && e.lunarDay === D(e.lunarYear, 12)) {
const a = r.format("YYYY-MM-DD");
["除夕", "封井", "祭井神", "贴春联", "迎财神"].forEach((o) => {
t.push({
date: a,
name: o,
type: "lunar"
});
});
}
}
], q = (r, t) => {
var s;
const e = [];
let a = h(r);
const o = h(t || r);
for (; a.isBefore(o) || a.isSame(o); ) {
const n = m(a);
n.isLeap || (((s = _t[n.lunarMon]) == null ? void 0 : s[n.lunarDay]) || []).forEach((i) => {
e.push({
date: a.format("YYYY-MM-DD"),
name: i,
type: "lunar"
});
}), yt.forEach((d) => d(a, e)), a = a.add(1, "day");
}
return e.reduce((n, d) => {
const i = n.find((_) => _.date === d.date);
return i ? i.name.push(d.name) : n.push({ date: d.date, name: [d.name] }), n;
}, []);
}, ut = {
getLunarFestivals: q
}, wt = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
__proto__: null,
default: ut,
getLunarFestivals: q
}, Symbol.toStringTag, { value: "Module" })), ft = {
...tt,
...ot,
...ht,
...wt
};
export {
ft as default,
X as findWorkday,
J as getDayDetail,
K as getHolidaysInRange,
m as getLunarDate,
j as getLunarDatesInRange,
q as getLunarFestivals,
R as getLunarYears,
I as getSolarDateFromLunar,
L as getSolarTermDate,
at as getSolarTerms,
$ as getSolarTermsInRange,
Q as getWorkdaysInRange,
C as getYearLeapMonth,
O as isHoliday,
G as isInLieu,
f as isWorkday,
D as monthDays
};