js 实现干支
干支纪年计算方法
干支纪年由天干(10个)和地支(12个)组成,60年一个循环。天干地支的组合顺序固定,已知某一年的干支,可推算其他年份。
天干序列:甲、乙、丙、丁、戊、己、庚、辛、壬、癸
地支序列:子、丑、寅、卯、辰、巳、午、未、申、酉、戌、亥
实现步骤
确定一个基准年份,如2020年为庚子年。计算目标年份与基准年份的差值,用天干地支的总数取模得到索引。
天干计算:(year - baseYear) % 10
地支计算:(year - baseYear) % 12
结果需处理负数的模运算。
JavaScript 实现代码
function getGanzhiYear(year) {
const BASE_YEAR = 2020; // 基准年份:庚子年
const tiangan = ['甲', '乙', '丙', '丁', '戊', '己', '庚', '辛', '壬', '癸'];
const dizhi = ['子', '丑', '寅', '卯', '辰', '巳', '午', '未', '申', '酉', '戌', '亥'];
// 处理模运算的负数情况
const mod = (n, m) => ((n % m) + m) % m;
const diff = year - BASE_YEAR;
const tgIndex = mod(diff, 10);
const dzIndex = mod(diff, 12);
return tiangan[tgIndex] + dizhi[dzIndex];
}
// 示例用法
console.log(getGanzhiYear(2023)); // 输出:癸卯
console.log(getGanzhiYear(2000)); // 输出:庚辰
扩展说明
该方法适用于公元后的年份计算。如需支持公元前年份,需调整基准年份和模运算逻辑。干支纪月、纪日逻辑类似,但基准点不同。
对于更复杂的农历日期计算,建议使用现成的库如lunar.js或chinese-lunar,它们已处理节气、闰月等规则。







