农历引擎
青梧的农历算法为自研实现,零第三方依赖,覆盖 1900—2100 共 201 个农历年。 核心是查表法:每年农历数据编码为一段 hex,记录闰月月份、各月大小(大月 30 天 / 小月 29 天)与闰月大小, 数据依据中国科学院紫金山天文台历书编制。
// 每年数据编码(示例)
// bits 0-3 : 闰月月份(0=无闰月)
// bits 4-15 : 12 个月的大小(bit4=正月 … bit15=腊月;1=大月30天,0=小月29天)
// bit 16 : 闰月大小(1=30天, 0=29天)
0x04bd8, 0x04ae0, 0x0a570, ...算法设计原则:纯函数、无副作用、无全局状态,日期计算统一使用 UTC,避免时区漂移。 因此农历推算可以在服务端(SSR)与浏览器端得到完全一致的结果。
二十四节气
节气采用近似算法 + 年份修正表,无需天文学求解,即可在毫秒级完成任意年份的节气计算。 每个节气附带完整的文化数据:物候、习俗、农事与养生建议。
// 节气详情示例(清明)
{
meaning: "天气清澈明朗,万物洁净,既是节气又是传统节日。",
phenology: "一候桐始华,二候田鼠化为鴽,三候虹始见。",
custom: "扫墓祭祖、踏青、放风筝、荡秋千、插柳。",
farming: "春播春种关键期,「清明前后,种瓜点豆」。",
health: "养肝护肝,外出踏青舒展身心,忌食发物。",
}节日数据
内置农历节日(春节、元宵、龙抬头、端午、七夕、中元、中秋、重阳等)与公历节日(元旦、劳动节、国庆等),每个节日带起源与习俗说明:
// 农历节日示例(1-1 春节)
{
name: "春节",
origin: "起源于殷商时期年头岁尾的祭神祭祖活动,是中国最隆重的传统节日。",
description: "俗称「过年」,有守岁、拜年、放鞭炮、贴春联等习俗。",
}干支与生肖
以 1900 年(庚子年)为基准,通过 (year - 1900) % 60 得到干支序数偏移, 推算出任意年份的天干地支与生肖。日历详情面板会展示当年的干支纪年。
黄历宜忌
提供按农历月日周期推算的简化宜忌数据(宜 / 忌 两组事项), 正式版黄历数据可通过插件扩展覆盖。
休假表
通过 holidays / workdays 配置注入国务院发布的法定节假日调休安排, 日历日格自动显示「休」/「班」角标:
new Calendar(el, {
holidays: {
holidays: ["2026-10-01", "2026-10-02", "2026-10-03", "2026-10-04", "2026-10-05", "2026-10-06", "2026-10-07"],
workdays: ["2026-10-10", "2026-10-11"],
},
});每个日格的 dayMeta 由插件管线合并生成:基础日期 → 农历插件 → 节日 / 节气 → 休假表 → 规则引擎, 最终写入 DOM。开发者可以按同一契约注册自定义插件。