你拿到一个公历日期,2026-02-17,不能直接把它当成农历正月初一,中间要经过一张农历数据表,公开农历数据表通常覆盖 1900 年至 2100 年,每年用一个十六进制数表示,常见起点是 1900-01-31,这一天对应农历 1900 年正月初一。
农历数据表不是随便编的,它记录每年十二个月或十三个月的大小月,以及闰月月份,常见做参考如下:
| 数据位 | 含义 | 示例说明 |
|---|---|---|
| 低 4 位 | 闰月月份 | 0 表示当年无闰月,6 表示闰六月 |
| 中间 12 位 | 十二个月大小月 | 1 为大月 30 天,0 为小月 29 天 |
| 第 13 位附近 | 闰月大小 | 有闰月时,用于判断闰月是 29 天还是 30 天 |
公开资料里常见的 1900 年数据是 0x04bd8,你不需要背下整张表,但要知道每一位在说什么,VBScript 里可以用数组保存,LunarData(0) = &H04bd8,后续年份依次排列。
如果是闰月,还要判断剩余天数是否落在闰月区间,顺序通常是:先过正常月份,再插入闰月,然后继续后面的月份,这个顺序不能乱。

下面是一段简化思路,重点看结构,不追求直接复制运行,真实项目要补齐 1900 至 2100 年数据表。
Function GetLunarYearDays(y)
Dim sum, i
sum = 348
For i = 1 To 12
If (LunarData(y 1900) And (0x8000 \ (2 ^ (i 1)))) <> 0 Then
sum = sum + 1
End If
Next
GetLunarYearDays = sum + GetLeapDays(y)
End Function
Function GetLeapDays(y)
If GetLeapMonth(y) > 0 Then
If (LunarData(y 1900) And 0x10000) <> 0 Then
GetLeapDays = 30
Else
GetLeapDays = 29
End If
Else
GetLeapDays = 0
End If
End Function
部署时,把 lunar.asp 放进 IIS 站点根目录或虚拟目录,Windows 里打开“启用或关闭 Windows 功能”,勾选 Internet Information Services,再进入“万维网服务 应用程序开发功能 ASP”,命令行执行 iisreset 后,访问 http://localhost/lunar.asp?date=2026-02-17 就能测试,注意 ASP 默认关闭详细错误,调试时可临时打开。
很多人把农历日期直接当成八字依据,这是常见误区,公历转阴历解决的是“今天是农历几月初几”,八字排盘还要看年柱、月柱、日柱、时柱,其中年柱和月柱以节气为界,不以农历初一为界。
业内专家指出,八字年柱通常以立春切换,月柱以节气切换,2026 年 2 月 17 日,农历是正月初一,公历已经过了立春,年柱按丙午年处理,月柱要看立春、惊蛰等节气,不是看正月十五,你如果只做公历转阴历,不做节气表,排出来的月柱可能出错。

ASP 公历转阴历是排盘的地基,不是整栋楼,用于黄历查询、农历生日提醒,它够用;用于专业八字,必须再接节气、干支和时区校正。
这个问题要看站点现状,老站如果已经跑在 Windows IIS 上,大量页面是 .asp,继续用 ASP 公历转阴历最省事,新建站、准备迁移服务器、需要现代框架,PHP 公历转阴历更合适,算法本身是一样的,都是查表加差值,差别在运行环境和维护成本。
| 对比项 | ASP 公历转阴历 | PHP 公历转阴历 |
|---|---|---|
| 运行环境 | Windows + IIS | Linux + Nginx/Apache 或 Windows |
| 老站兼容 | 高,原页面可直接调用 | 需要改后缀或做接口 |
| 农历算法 | 查表法,逻辑一致 | 查表法,逻辑一致 |
| 维护生态 | 老代码多,新资料少 | 社区活跃,扩展方便 |
| 适用场景 | 已有 ASP 黄历站、排盘站 | 新建站、API 服务、小程序后端 |
行业共识认为,技术选型先看存量系统,再看团队熟悉度,硬把 ASP 站迁到 PHP,不一定划算;硬在新项目里用 ASP,也不一定省心,公历转阴历的准确性取决于数据表和边界处理,不取决于语言本身。
广东地区宗祠、庙宇、婚嫁、入伙、开业择日需求多,很多老黄历站和内部排盘工具仍在使用 ASP,广州、佛山、潮汕一带的用户习惯查农历、干支、宜忌、冲煞,系统通常这样组合:
地域场景里,真太阳时校正更细致,广东经度与北京时间有差异,深圳、湛江、汕头的东西跨度也不小,如果择日系统要求时辰精确,建议加经度输入,把平太阳时换算成真太阳时,再定子丑寅卯。

市面上 ASP 公历转阴历源码价格差异不小,简单查表版从几十元到数百元不等,带节气、干支、八字、宜忌、后台管理的定制版会更高,价格通常受这些因素影响:
买源码时,重点看数据表是否完整、闰月逻辑是否可查、节气边界是否处理,便宜源码如果只给一张不完整的表,后期排盘出错,修复成本比源码价格更高。
ASP 公历转阴历不是玄学黑箱,核心就是数据表加差值,把 1900-2100 年数据表、闰月判断、节气边界这三块做稳,老 ASP 站也能继续支撑农历查询、排盘和择日。
不能直接,公历转阴历只输出农历年月日,八字还要年柱、月柱、日柱、时柱,其中年柱和月柱以立春、惊蛰等节气为界,时柱还涉及真太阳时,需要再接入节气表和干支推算。
常见公开数据表多覆盖 1900 年至 2100 年,超过这个范围,需要补充新的农历数据表,并验证闰月、大小月和节气边界,没有扩展数据表时,程序通常只能报错或给出错误结果。
先读取当前农历年数据,低 4 位为 0 表示无闰月,非 0 就是闰月月份,计算总天数时,正常十二月之外再加闰月天数,逐月扣减时,走到闰月月份后插入闰月,再继续后面的月份,闰月天数以数据表对应位为准,不能凭月份名称硬编码。