UNPKG

chinese-days

Version:

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

830 lines (829 loc) 26.9 kB
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 };