生辰八字排盘
命理师接到一位甲戌年闰二月出生的客户,客户只记得公历生日是1994年3月28日。传统排盘需要先确认该年是否有闰月,再查该公历日对应的是闰二月还是三月。本工具1900-2100年覆盖所有闰月规则,输入1994-03-28,直接输出农历甲戌年二月十七,无需翻查万年历,避免因闰月归属错误导致八字日柱、时柱全盘算错。
翻旧家谱时,腊月廿三“小年”总对不上公历日期;算八字排盘,又怕闰月把生辰弄错。这个工具把1900到2100年的公历与农历(含闰月)逐日对应,输入任一历法日期,直接输出另一历法结果。农历转公历的算法依赖天文台发布的朔望月数据,而非简单查表——日期转换背后有真实的天文计算逻辑。
命理师接到一位甲戌年闰二月出生的客户,客户只记得公历生日是1994年3月28日。传统排盘需要先确认该年是否有闰月,再查该公历日对应的是闰二月还是三月。本工具1900-2100年覆盖所有闰月规则,输入1994-03-28,直接输出农历甲戌年二月十七,无需翻查万年历,避免因闰月归属错误导致八字日柱、时柱全盘算错。
家里老人坚持按农历过八十大寿,但子女都在外地工作,需要提前半年定酒店和请假。老人只记得生日是农历八月十五,但2025年中秋节对应的公历是10月6日,正好是国庆假期最后一天,返程高峰。用本工具反向查询,发现2025年农历八月十五对应公历10月6日,确认假期内,立刻锁定酒店档期,避免子女请假冲突。
外贸公司与德国客户签合同,交货条款写的是“收到预付款后60个自然日”,但客户打款日是2024年4月4日(清明节)。国内工厂习惯按农历安排生产,认为清明节后是淡季。用本工具确认2024年清明节是4月4日,当天打款,倒推60天是6月3日。工厂据此安排5月集中排产,避开端午假期(6月10日),确保按时出货。
地方志编辑整理民国时期的一本账册,记载“民国二十三年正月初五,购地契一纸”。民国二十三年对应公历1934年,但正月初五究竟是1934年2月18日还是2月19日,取决于当年春节的精确日期。用本工具输入1934年,查询正月初一为2月14日,则初五为2月18日,与账册中同日记录的“立春后三日”吻合,确认校勘无误。
理赔员处理一份老人身故理赔,合同约定“被保险人年满70周岁后身故,保额翻倍”。老人身份证出生日期为1953年6月15日(公历),但其子女提供的族谱记载老人出生于农历癸巳年五月初四。用本工具将1953年6月15日转为农历癸巳年五月初四,与族谱一致,确认老人实际生日为公历1953年6月15日,理赔员据此计算其70周岁节点为2023年6月15日,身故日期为2024年1月,符合翻倍条件。
| 输入 | 输出 | 说明 |
|---|---|---|
| 2024年2月10日(公历 → 农历) | 甲辰年 正月初一 | 常规:2024年春节,验证公历转农历的春节日期是否正确 |
| 1900年1月31日(公历 → 农历) | 庚子年 正月初一 | 边界:工具覆盖起始日(1900年),验证1900年农历新年(庚子年正月初一)对应公历1月31日 |
| 2100年12月31日(公历 → 农历) | 庚申年 腊月初一 | 边界:工具覆盖结束日(2100年),验证2100年最后一天公历转农历结果 |
| 2023年3月22日(公历 → 农历) | 癸卯年 闰二月 初一 | 易错:2023年有闰二月,验证工具能否正确处理闰月并显示“闰二月” |
| 甲辰年 正月初一(农历 → 公历) | 2024年2月10日 | 常规:农历转公历,与第一条示例互逆,验证双向转换一致性 |
| 庚子年 闰四月 十五(农历 → 公历) | 2020年6月6日 | 边界:2020年有闰四月,验证农历含闰月的日期转公历是否正确(闰四月十五对应公历6月6日) |
| 2024年2月29日(公历 → 农历) | 甲辰年 正月二十 | 易错:2024年是闰年,2月29日存在,验证工具对闰年2月29日的处理(非每年都有) |
| 1900年2月28日(公历 → 农历) | 庚子年 正月廿九 | 边界:1900年不是闰年,2月只有28天,验证工具对1900年2月28日的处理(1900年2月28日对应农历正月的最后一天) |
1.农历月份与公历月份混淆,导致闰月查询错误
输入农历“2023年4月”查询公历,但实际2023年农历有闰二月,4月是闰二月后的四月明确区分:农历“2023年闰二月”或“2023年四月”(非闰月)农历闰月会改变月份顺序,例如闰二月后,下一个农历月仍称“三月”而非“四月”。不区分闰月会导致公历日期偏移一个月。
2.公历转农历时,输入了不存在的日期(如2月30日)
输入公历“2023-02-30”进行转换输入“2023-02-28”或“2023-03-01”公历2月只有28或29天,30日不存在。工具不会自动修正,直接报错或返回无效结果。
3.农历日期输入格式错误,缺少“年”或“月”
输入“2023-正月初一”或“正月初一2023”输入“2023年正月初一”或“2023-01-01”(农历)工具要求农历输入必须包含“年”字段,且顺序固定(年+月+日)。缺少年份或顺序颠倒会导致解析失败。
4.公历转农历时,输入了1900年之前的日期
输入公历“1899-12-31”输入“1900-01-01”或之后的日期工具仅覆盖1900-2100年,超出范围的日期无对应农历数据,会返回空或错误。
5.农历转公历时,输入了不存在的农历日期(如闰正月)
输入农历“2023年闰正月十五”输入“2023年正月十五”或“2023年闰二月十五”农历闰月只出现在特定月份(如2023年闰二月),并非每个月都有闰月。查询不存在的闰月会导致无结果。
6.将公历日期误当作农历日期输入
想查2023年春节的公历日期,却输入公历“2023-01-22”进行转换选择“农历→公历”方向,输入“2023年正月初一”工具默认双向转换,但方向选错会导致结果相反。春节是农历正月初一,应使用农历转公历功能。
7.农历月份使用数字而非中文,导致解析歧义
输入“2023年1月1日”意图表示农历正月初一输入“2023年正月初一”或“2023年01月01日”(农历)工具农历月份必须用中文(正月、二月…腊月),数字“1月”会被误判为公历1月,导致转换结果错误。
8.公历转农历时,输入了闰年2月29日但当年不是闰年
输入公历“2023-02-29”输入“2023-02-28”或“2024-02-29”2023年不是闰年,2月只有28天。输入不存在的日期会直接报错。
农历日序 = (公历日 - 1900-01-31 的差值天数) - 农历年起始偏移 + 1
公历日待转换的公历日期,如 2025-03-15差值天数公历日与 1900-01-31 相差的天数农历年起始偏移该农历年正月初一对应的差值天数公历 2025-03-15 转农历:1900-01-31 到 2025-03-15 差值天数为 45717 天;2025 年农历正月初一对应差值天数 45696 天;农历日序 = 45717 - 45696 + 1 = 22,即农历二月廿二(2025 年闰六月,该日属二月)。
4 种主流语言实现,复制即用:
import datetime
from lunardate import LunarDate
# 公历转农历
solar = datetime.date(2024, 10, 1)
lunar = LunarDate.fromSolarDate(solar.year, solar.month, solar.day)
print(f"{solar} → 农历{lunar.year}年{lunar.month}月{lunar.day}日") # 例: 2024-10-01 → 农历2024年8月29日
# 农历转公历(含闰月:闰六月用 isleap=True)
lunar = LunarDate(2024, 6, 1, isleap=True)
solar = lunar.toSolarDate()
print(f"农历2024年闰六月初一 → {solar}") # 例: 2024-07-26const { Solar, Lunar } = require('lunar-javascript');
// 公历转农历
const solar = Solar.fromYmd(2024, 10, 1);
const lunar = solar.getLunar();
console.log(`${solar.toFullString()} → ${lunar.toFullString()}`); // 例: 2024-10-01 → 二〇二四年八月廿九
// 农历转公历(含闰月:getLunar 自动识别闰月)
const lunar2 = Lunar.fromYmd(2024, 6, 1, true); // 第四个参数 true 表示闰月
console.log(`农历2024年闰六月初一 → ${lunar2.getSolar().toFullString()}`); // 例: 2024-07-26package main
import (
"fmt"
"time"
"github.com/nosixtools/solarlunar"
)
func main() {
// 公历转农历
solar := time.Date(2024, 10, 1, 0, 0, 0, 0, time.UTC)
lunar := solarlunar.SolarToLunar(solar)
fmt.Printf("%s → 农历%d年%d月%d日\n", solar.Format("2006-01-02"), lunar.Year, lunar.Month, lunar.Day)
// 例: 2024-10-01 → 农历2024年8月29日
// 农历转公历(含闰月:isleap 传 true)
solar2 := solarlunar.LunarToSolar(2024, 6, 1, true)
fmt.Printf("农历2024年闰六月初一 → %s\n", solar2.Format("2006-01-02"))
// 例: 2024-07-26
}#!/bin/bash
# 依赖: lunar-date (npm 包,需先安装: npm install -g lunar-date)
# 公历转农历
lunar-date --solar 2024-10-01
# 输出: 2024-08-29 (农历)
# 农历转公历(含闰月:--leap 标记)
lunar-date --lunar 2024-6-1 --leap
# 输出: 2024-07-26可以。本工具覆盖1900年至2100年,含闰月,完全包含2000年以前的所有日期。输入公历日期即可得到对应农历,或输入农历日期(需注明是否闰月)转公历。注意:1900年以前的农历数据因历法推算方式不同,本工具不覆盖,请勿输入。
对。农历闰月(如闰四月)在公历中对应的是同月偏后的日期,通常落在公历五月下旬到六月之间。本工具后端算法已处理闰月逻辑,你只需在输入时选择正确的农历月份(如“四月”或“闰四月”),结果即准确。如果不确定当年是否有闰月,可先查当年农历月份列表。
差一天常见原因是农历日期的“夜子时”或“早子时”归属差异。部分老旧算法以23:00为日界,而本工具按现代历法标准以0:00为日界。另外,不同工具对1900-2100年间的历法数据版本(如紫金山天文台历谱 vs 民间历法)也可能导致极个别日期(如1984年前后)差一天。本工具采用公开天文历算数据,与主流历书对齐。
不行。输入框只接受数字形式:年份用四位数字(如2023),月份用数字(1-12,闰月需单独勾选或选择“闰X月”),日期用数字(1-30)。不接受中文数字(如“二〇二三”)或大写汉字。如果手头只有中文日期,请先转换为数字再输入。
本工具是BE实现,每次转换需要将你输入的日期发送到后端服务器进行计算,然后返回结果。所以必须联网。转换过程中,仅传输日期数字(年、月、日、闰月标记),不涉及你的姓名、IP、设备信息。服务器不存储转换记录,转换完毕后即丢弃。
正确。1949年10月1日(公历)确实对应农历己丑年八月初十。这是公开历史日期,本工具数据与《中国历法总表》一致。你可以用这个日期验证工具准确性:输入公历1949-10-01,农历结果应为八月初十;反过来输入农历1949-08-10,公历结果应为1949-10-01。
首先确认你查询的农历日期是否正确:中秋节是农历八月十五。如果输入正确但结果与App不符,可能是App使用了不同版本的历法数据(如某些App基于清代《时宪历》,而本工具基于现代天文推算)。另外,极少数年份(如2020年)因闰四月导致中秋节公历日期在十月,与常理认知不同,但历法准确。建议以国家天文台或紫金山天文台发布的官方数据为准。
目前不支持批量导入或批量粘贴。每次只能输入一个日期进行转换。如果确实需要批量处理,建议逐一输入并手动记录结果。未来版本可能会考虑加入批量功能,但当前无此计划。对于少量日期(如10个以内),逐个转换并不慢。
隐私保证所有计算与处理均在你的浏览器本地完成,输入数据不会上传服务器,也不会保存或共享。