UNPKG

chinese-days

Version:

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

988 lines (987 loc) 31.1 kB
var P = Object.defineProperty; var U = (e, t, r) => t in e ? P(e, t, { enumerable: !0, configurable: !0, writable: !0, value: r }) : e[t] = r; var c = (e, t, r) => U(e, typeof t != "symbol" ? t + "" : t, r); 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, r = "day") { const a = new d(t).toDate(), n = this._date.getTime() - a.getTime(); switch (r) { 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(n / (1e3 * 60 * 60 * 24)); } } startOf(t) { const r = new Date(this._date); switch (t) { case "year": r.setMonth(0), r.setDate(1), r.setHours(0, 0, 0, 0); break; case "month": r.setDate(1), r.setHours(0, 0, 0, 0); break; case "day": r.setHours(0, 0, 0, 0); break; } return new d(r); } endOf(t) { const r = new Date(this._date); switch (t) { case "year": r.setMonth(11), r.setDate(31), r.setHours(23, 59, 59, 999); break; case "month": r.setDate(new Date(r.getFullYear(), r.getMonth() + 1, 0).getDate()), r.setHours(23, 59, 59, 999); break; case "day": r.setHours(23, 59, 59, 999); break; } return new d(r); } add(t, r) { const a = new Date(this._date); switch (r) { 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, r) { return this.add(-t, r); } format(t) { const r = { 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) => r[a].toString()); } year(t) { if (t === void 0) return this._date.getFullYear(); const r = new Date(this._date); return r.setFullYear(t), new d(r); } month(t) { if (t === void 0) return this._date.getMonth(); const r = new Date(this._date); return r.setMonth(t), new d(r); } date(t) { if (t === void 0) return this._date.getDate(); const r = new Date(this._date); return r.setDate(t), new d(r); } day(t) { if (t === void 0) return this._date.getDay(); { const r = this._date.getDay(), a = t - r, n = new Date(this._date); return n.setDate(this._date.getDate() + a), new d(n); } } isBefore(t) { const r = new d(t).toDate(); return this._date.getTime() < r.getTime(); } isAfter(t) { const r = new d(t).toDate(); return this._date.getTime() > r.getTime(); } isSame(t, r = "day") { const a = new d(t).toDate(); switch (r) { 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, r, a) { const n = new d(t).startOf(a).toDate(), l = new d(r).endOf(a).toDate(), o = this.toDate(); return o >= n && o <= l; } }; c(d, "daysOfWeek", [ "Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday" ]); let S = d; const h = (e) => new S(e), u = (e) => h(e).startOf("day"), Y = (e, t) => { e = u(e), t = u(t); const r = t.diff(e, "day"); return Array.from({ length: r + 1 }, (a, n) => e.add(n, "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() { c(this, "dayDetails", {}); c(this, "holidays", {}); c(this, "workdays", {}); c(this, "inLieuDays", {}); } /** year at */ y(t) { return this.dayDetails.year = t, this; } /** 查询某年 节假日天数 */ getHolidayDays(t, r) { let a = 0; for (const [n, l] of Object.entries(W)) { if (parseInt(n) > t) break; l[r] !== void 0 && (a = l[r]); } return a; } mark(t) { return this.dayDetails.holiday = t, this; } save(t, r, 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 = r, this.dayDetails.dayType = a; const n = h(`${this.dayDetails.year}-${t}-${r}`).format("YYYY-MM-DD"), l = this.getHolidayDays(this.dayDetails.year, this.dayDetails.holiday), o = `${this.dayDetails.holiday},${l}`; return a === 2 ? this.holidays[n] = o : a === 1 ? this.workdays[n] = o : a === 3 && (this.inLieuDays[n] = o), this; } to(t, r) { 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}` ), n = h(`${this.dayDetails.year}-${t}-${r}`); if (n.isBefore(a) || n.isSame(a)) throw new Error("end date should be after start date"); const l = this.getHolidayDays(this.dayDetails.year, this.dayDetails.holiday), o = `${this.dayDetails.holiday},${l}`, i = n.diff(a, "day"); for (let s = 1; s <= i; s++) { const _ = a.add(s, "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, r) { return this.save( t, r, 1 /* Workday */ ); } /** rest */ r(t, r) { return this.save( t, r, 2 /* Holiday */ ); } /** in-lieu */ i(t, r) { return this.save( t, r, 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 e = new z(); return e.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), e.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), e.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), e.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), e.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), e.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), e.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), e.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), e.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), e.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), e.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), e.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), e.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), e.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), e.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), e.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), e.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), e.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), e.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), e.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), e.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), e.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: e.holidays, workdays: e.workdays, inLieuDays: e.inLieuDays }; }, { holidays: M, workdays: k, inLieuDays: Z } = V(), w = (...e) => { if (e.length !== 1) return e.map((r) => w(r)); const t = u(e[0]); if (!t.isValid()) throw new Error(`unsupported type ${typeof t}, expected type is Date or Dayjs`); return t; }, O = (e) => !f(e), f = (e) => { const t = w(e), r = t.day(), a = t.format("YYYY-MM-DD"); return !!(k[a] || r >= 1 && r <= 5 && !M[a]); }, G = (e) => (e = w(e), !!Z[e.format("YYYY-MM-DD")]), J = (e) => { e = w(e); const t = e.format("YYYY-MM-DD"); if (k[t]) return { date: t, work: !0, name: k[t] }; if (M[t]) return { date: t, work: !1, name: M[t] }; { const r = e.day(); return { date: t, work: r !== 0 && r !== 6, name: e.format("dddd") }; } }, K = (e, t, r = !0) => (e = w(e), t = w(t), r ? Y(e, t).filter(O).map((a) => a.format("YYYY-MM-DD")) : Y(e, t).filter((a) => M[a.format("YYYY-MM-DD")]).map((a) => a.format("YYYY-MM-DD"))), Q = (e, t, r = !0) => (e = w(e), t = w(t), r ? Y(e, t).filter(f).map((a) => a.format("YYYY-MM-DD")) : Y(e, t).filter((a) => f(a) && a.day() >= 1 && a.day() <= 5).map((a) => a.format("YYYY-MM-DD"))), X = (e = 0, t = h()) => { if (t = u(t), e === 0) { if (f(t)) return t.format("YYYY-MM-DD"); e = 1; } const r = e > 0 ? 1 : -1; let a = Math.abs(e); for (; a > 0; ) t = t.add(r, "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 = (e, t, r) => { const a = e >= 2e3 ? 21 : 20, n = e % 100, l = 0.2422, o = et[r][a === 21 ? 1 : 0]; let i = Math.floor(n / 4); [ "lesser_cold", "greater_cold", "the_beginning_of_spring", "rain_water" ].includes(r) && (i = Math.floor((n - 1) / 4)); let s = Math.floor(n * l + o) - i; const _ = rt[`${e}_${r}`]; return _ && (s += _), h(`${e}-${t}-${s}`).format("YYYY-MM-DD"); }, at = (e, t) => { const r = []; let a = u(e); const n = u(t || e); for (; a.isBefore(n) || a.isSame(n); ) { const l = a.year(), o = a.month() + 1; T[o].forEach((i) => { const s = h(L(l, o, i)); (s != null && s.isBefore(n) || s != null && s.isSame(n)) && (s != null && s.isAfter(a) || s != null && s.isSame(a)) && r.push({ date: s.format("YYYY-MM-DD"), term: i, name: E[i], index: 1 }); }), o === 12 ? a = a.add(1, "year").startOf("year") : a = a.add(1, "month").startOf("month"); } return r; }, $ = (e, t) => { let r = u(e).subtract(1, "month"); const a = u(t || e).add(1, "month"), n = []; for (; r.isBefore(a) || r.isSame(a); ) { const o = r.year(), i = r.month() + 1; T[i].forEach((s) => { const _ = h(L(o, i, s)); n.push({ term: s, date: _ }); }), r.month() === 11 ? r = r.add(1, "year").startOf("year") : r = r.add(1, "month").startOf("month"); } const l = []; return n.forEach((o, i) => { for (let s = o.date; n[i + 1] && s.isBefore(n[i + 1].date); s = s.add(1, "day")) l.push({ day: s, term: o.term, name: E[o.term], index: s.diff(o.date, "day") + 1 }); }), t || (t = e), l.filter((o) => o.day.isBetween(e, t, "day")).map((o) => ({ date: o.day.format("YYYY-MM-DD"), term: o.term, name: o.name, index: o.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 = (e) => { let t = 348; for (let r = 32768; r > 8; r >>= 1) t += g[e - 1900] & r ? 1 : 0; return t + N(e); }, p = (e) => g[e - 1900] & 15, N = (e) => p(e) ? g[e - 1900] & 65536 ? 30 : 29 : 0, b = (e) => H[e % 10] + B[e % 12], D = (e, t) => g[e - 1900] & 65536 >> t ? 30 : 29, st = (e) => nt[(e - 4) % 12], it = (e) => { const t = ["初", "十", "廿", "三十"]; if (e === 10) return "初十"; if (e === 20) return "二十"; if (e === 30) return "三十"; const r = Math.floor(e / 10), a = e % 10; return t[r] + (a ? F[a] : ""); }, lt = (e) => `${H[(e - 4) % 10]}${B[(e - 4) % 12]}年`, R = (e, t) => { const r = []; for (let a = e; a <= t; a++) r.push({ year: a, lunarYear: lt(a), lunarYearCN: a.toString().split("").map((n) => F[Number(n)]).join("") }); return r; }, C = (e) => { const t = p(e); return { year: e, leapMonth: t || void 0, leapMonthCN: t ? `闰${A[t - 1]}月` : void 0, days: t ? g[e - 1900] & 65536 ? 30 : 29 : 0 }; }, m = (e) => { const t = new Array(7).fill(0); let r = 0, a = 0; const n = h(new Date(1900, 0, 31)), l = h(e); let o = l.diff(n, "day"); t[5] = o + 40, t[4] = 14; let i = 1900; for (; i < 2100 && o > 0; i++) r = x(i), o -= r, t[4] += 12; o < 0 && (o += r, i--, t[4] -= 12), t[0] = i, t[3] = i - 1864, a = p(i), t[6] = 0; for (let s = 1; s < 13 && o >= 0; s++) a > 0 && s === a + 1 && t[6] === 0 ? (--s, t[6] = 1, r = N(i)) : r = D(i, s), t[6] === 1 && s === a + 1 && (t[6] = 0), o -= r, t[6] === 0 && t[4]++, t[1] = s; return o === 0 && a > 0 && t[6] === 1 ? t[6] = 0 : o < 0 && (o += r, t[1]--, t[4]--), t[2] = o + 1, { date: l.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((s) => F[Number(s)]).join("")}`, // 农历年份中文表示 lunarMonCN: `${A[t[1]]}月`, // 农历月份中文表示 lunarDayCN: it(t[2]) // 农历日期中文表示 }; }, j = (e, t) => { const r = h(e), a = h(t), n = []; for (let l = r; l.isBefore(a) || l.isSame(a, "day"); l = l.add(1, "day")) n.push(m(l)); return n; }, I = (e) => { const t = h(e), r = t.year(), a = t.month() + 1, n = t.date(); let l = 0; for (let y = 1900; y < r; y++) l += x(y); let o = p(r); for (let y = 1; y < a; y++) l += D(r, y), y === o && (l += N(r)); l += n - 1; const i = h(new Date(1900, 0, 31)), s = i.add(l, "day").format("YYYY-MM-DD"); let _ = l, v; return o === a && (_ += D(r, a), v = i.add(_, "day").format("YYYY-MM-DD")), { date: s, leapMonthDate: v }; }, dt = { getLunarYears: R, getYearLeapMonth: C, getLunarDate: m, getLunarDatesInRange: j, getSolarDateFromLunar: I }, ht = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ __proto__: null, default: dt, 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 = [ // 处理寒食节(清明前一日) (e, t) => { const r = e.add(1, "day"); $(r).find((n) => n.term === "pure_brightness") && t.push({ date: e.format("YYYY-MM-DD"), name: "寒食节", type: "solar_term" }); }, // 处理除夕(农历腊月最后一日) (e, t) => { const r = m(e); if (r.lunarMon === 12 && r.lunarDay === D(r.lunarYear, 12)) { const a = e.format("YYYY-MM-DD"); ["除夕", "封井", "祭井神", "贴春联", "迎财神"].forEach((n) => { t.push({ date: a, name: n, type: "lunar" }); }); } } ], q = (e, t) => { var l; const r = []; let a = h(e); const n = h(t || e); for (; a.isBefore(n) || a.isSame(n); ) { const o = m(a); o.isLeap || (((l = _t[o.lunarMon]) == null ? void 0 : l[o.lunarDay]) || []).forEach((s) => { r.push({ date: a.format("YYYY-MM-DD"), name: s, type: "lunar" }); }), yt.forEach((i) => i(a, r)), a = a.add(1, "day"); } return r.reduce((o, i) => { const s = o.find((_) => _.date === i.date); return s ? s.name.push(i.name) : o.push({ date: i.date, name: [i.name] }), o; }, []); }, 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 };