当前位置:首页 > JavaScript

js实现节气

2026-03-15 11:36:00JavaScript

节气计算方法

节气计算通常基于太阳黄经角度,可通过以下步骤实现:

js实现节气

  1. 确定太阳黄经
    每个节气对应固定的黄经角度(如春分为0°,冬至为270°)。公式如下:
    [ \lambda = (节气序号 \times 15°) \mod 360° ]
    其中节气序号从春分(0)开始递增。

    js实现节气

  2. 计算儒略日(Julian Day)
    儒略日是天文计算的基础,公历转儒略日的公式为:
    [ JD = \lfloor 365.25 \times (Y + 4716) \rfloor + \lfloor 30.6001 \times (M + 1) \rfloor + D + B - 1524.5 ]

    • (Y)为年份,(M)为月份,(D)为日期;
    • (B)为格里高利历修正值(1582年10月15日后适用)。
  3. 迭代求解节气时刻
    使用牛顿迭代法逼近节气对应的儒略日:

    • 初始估计:基于平均节气间隔(约15.2天);
    • 修正值:根据太阳黄经与目标角度的差值调整。

JavaScript 实现代码

// 计算儒略日
function julianDay(year, month, day) {
    if (month <= 2) {
        year -= 1;
        month += 12;
    }
    const A = Math.floor(year / 100);
    const B = 2 - A + Math.floor(A / 4);
    return Math.floor(365.25 * (year + 4716)) + Math.floor(30.6001 * (month + 1)) + day + B - 1524.5;
}

// 计算太阳黄经(简化模型)
function solarLongitude(jd) {
    const T = (jd - 2451545.0) / 36525;
    const L0 = 280.46645 + 36000.76983 * T;
    const M = 357.52910 + 35999.05030 * T;
    const C = (1.914600 - 0.004817 * T) * Math.sin(M * Math.PI / 180);
    return (L0 + C) % 360;
}

// 计算节气(示例:春分)
function findSolarTerm(year, targetAngle) {
    let jd = julianDay(year, 3, 20); // 初始估计
    for (let i = 0; i < 10; i++) { // 迭代10次
        const lambda = solarLongitude(jd);
        const delta = (lambda - targetAngle + 360) % 360;
        jd -= delta / 360 * 365.25; // 粗略修正
    }
    return new Date((jd - 2440587.5) * 86400000); // 转UTC时间
}

// 示例:计算2023年春分(黄经0°)
const springEquinox = findSolarTerm(2023, 0);
console.log(springEquinox.toLocaleString());

节气名称与黄经对照表

节气 黄经角度
春分
清明 15°
立夏 45°
夏至 90°
... ...

注意事项

  1. 精度问题
    简化模型误差约±1天,高精度需引入光行差、章动等修正。
  2. 时区处理
    返回结果为UTC时间,需根据本地时区调整。
  3. 性能优化
    频繁计算时可预生成节气表缓存。

如需完整24节气实现,可扩展solarLongitude函数并添加节气名称映射。

标签: 节气js
分享给朋友:

相关文章

js实现验证码

js实现验证码

使用Canvas生成图形验证码 在HTML中创建一个Canvas元素用于绘制验证码。通过JavaScript随机生成数字或字母组合,并添加干扰线、噪点等干扰元素增强安全性。 <canvas i…

js实现日历

js实现日历

实现日历的基本思路 使用JavaScript实现日历的核心是动态生成日期表格,并处理月份切换逻辑。需要计算当前月的天数、起始星期几,并动态渲染到页面上。 获取当前日期信息 通过Date对象获取当前年…

js实现预览

js实现预览

文件上传预览实现 使用JavaScript实现文件上传预览功能,可以通过FileReader对象读取文件内容并显示预览。以下代码支持图片、文本和PDF文件的预览: // HTML部分需要包含inpu…

js实现抽奖

js实现抽奖

实现抽奖功能的基本思路 抽奖功能的核心是随机选择奖项并展示结果。可以通过数组存储奖项,利用随机数生成索引,最后通过动画增强用户体验。 准备奖项数据 定义一个数组存储奖项信息,每个奖项可以包含名称、图…

js jquery

js jquery

jQuery 简介 jQuery 是一个快速、简洁的 JavaScript 库,简化了 HTML 文档遍历、事件处理、动画设计和 Ajax 交互。它兼容多种浏览器,提供易于使用的 API,使开发者能够…

js实现祖玛

js实现祖玛

实现祖玛游戏的核心思路 祖玛游戏的核心玩法是发射彩色珠子,形成三个或以上相同颜色的珠子即可消除。以下是使用JavaScript实现的基本框架。 游戏初始化 创建画布并初始化游戏状态: const…