当前位置:首页 > JavaScript

js 实现干支

2026-03-15 06:07:49JavaScript

干支纪年法的基本概念

干支纪年法是中国传统的纪年方式,由天干(10个)和地支(12个)组合而成,共60种组合,称为一个甲子循环。天干包括:甲、乙、丙、丁、戊、己、庚、辛、壬、癸;地支包括:子、丑、寅、卯、辰、巳、午、未、申、酉、戌、亥。

干支计算的核心逻辑

干支纪年与公历年份的换算需注意:干支纪年以农历立春为分界,但通常简化处理为按公历年份计算。核心公式为:

  • 天干序号 = (年份 - 4) % 10(结果小于0时加10)
  • 地支序号 = (年份 - 4) % 12(结果小于0时加12)

JavaScript实现代码

function getChineseEraYear(year) {
    const heavenlyStems = ['甲', '乙', '丙', '丁', '戊', '己', '庚', '辛', '壬', '癸'];
    const earthlyBranches = ['子', '丑', '寅', '卯', '辰', '巳', '午', '未', '申', '酉', '戌', '亥'];

    // 处理公元前年份(需验证历史准确性)
    const baseYear = year >= 0 ? year : year + 1;

    const stemIndex = (baseYear - 4) % 10;
    const branchIndex = (baseYear - 4) % 12;

    return {
        heavenlyStem: heavenlyStems[stemIndex >= 0 ? stemIndex : stemIndex + 10],
        earthlyBranch: earthlyBranches[branchIndex >= 0 ? branchIndex : branchIndex + 12],
        fullName: heavenlyStems[stemIndex >= 0 ? stemIndex : stemIndex + 10] + 
                 earthlyBranches[branchIndex >= 0 ? branchIndex : branchIndex + 12]
    };
}

// 示例:获取2023年干支
console.log(getChineseEraYear(2023)); // 输出:{ heavenlyStem: '癸', earthlyBranch: '卯', fullName: '癸卯' }

边界情况处理

  1. 公元前年份:需注意公元无0年,公元前1年之后是公元1年。
  2. 年份验证:可添加参数校验确保输入为整数。
  3. 立春分界:精确计算需结合农历日期,上述代码采用简化处理。

扩展功能

若需计算月、日、时的干支(八字),需引入农历转换库(如lunar.js)和时辰计算。时辰地支固定对应现代时间:

js 实现干支

  • 子时:23:00-1:00
  • 丑时:1:00-3:00
  • ...
  • 亥时:21:00-23:00

注意事项

干支纪年与公历并非严格对应,重大历史事件研究时应参考专业历法工具。此实现适用于一般场景的快速换算需求。

标签: 干支js
分享给朋友:

相关文章

vue实现js休眠

vue实现js休眠

Vue 中实现 JavaScript 休眠 在 Vue 中实现 JavaScript 休眠通常需要使用异步方式,以避免阻塞主线程。以下是几种常见方法: 使用 setTimeout 和 Promise…

js实现tab选项卡切换

js实现tab选项卡切换

实现Tab选项卡切换的JavaScript方法 使用纯JavaScript实现Tab切换功能,可以通过监听点击事件动态切换内容显示状态。以下是两种常见实现方式: 基础DOM操作实现 // 获取所有…

js实现百叶窗

js实现百叶窗

使用CSS和JavaScript实现百叶窗效果 通过CSS动画和JavaScript事件监听可以实现百叶窗效果。核心思路是将内容区域分割为多个条状元素,通过控制它们的展开/折叠状态来模拟百叶窗。 &…

js手势实现

js手势实现

手势识别实现方法 在JavaScript中实现手势识别通常涉及监听触摸事件(touchstart、touchmove、touchend)或鼠标事件(mousedown、mousemove、mouseu…

利用js实现

利用js实现

使用 JavaScript 实现 在 JavaScript 中,可以通过多种方式实现功能,具体取决于需求。以下是几种常见的方法: 方法一:使用原生 JavaScript // 示例代码…

js实现密码

js实现密码

密码强度验证 使用正则表达式验证密码强度是一种常见方法。以下代码检查密码是否包含大小写字母、数字和特殊字符,且长度至少为8位: function checkPasswordStrength(pass…