UNPKG

chinese-days

Version:

中国节假日、调休日、工作日、24节气查询,农历阳历互转,支持 TS、CommonJS、UMD 模块化使用,提供 ics 日历格式,可供 Google Calendar、Apple Calendar、Microsoft Outlook 等客户端订阅。

994 lines (993 loc) 31 kB
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 };