当前位置:首页 > JavaScript

js实现节气

2026-03-15 11:36:00JavaScript

节气计算方法

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

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

  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. 迭代求解节气时刻
    使用牛顿迭代法逼近节气对应的儒略日:

    js实现节气

    • 初始估计:基于平均节气间隔(约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实现文字滚动

实现文字滚动的几种方法 使用CSS动画实现滚动 通过CSS的@keyframes和transform属性可以实现平滑的文字滚动效果。 <style> .scroll-text { w…

js分页实现

js分页实现

分页的基本原理 分页的核心是通过计算当前页码和数据偏移量,从服务器或本地数据中截取对应范围的数据进行展示。通常需要以下参数:当前页码(currentPage)、每页条数(pageSize)、总数据量(…

js实现删除

js实现删除

使用 splice 方法删除数组元素 splice 方法可以删除数组中的元素,并返回被删除的元素。它接受两个参数:起始索引和要删除的元素数量。 const array = [1, 2, 3, 4…

js实现左右滑动

js实现左右滑动

实现左右滑动的 JavaScript 方法 监听触摸事件 通过 touchstart、touchmove 和 touchend 事件来检测用户的手势操作。记录触摸的起始位置和移动距离,判断滑动方向。…

js实现隐藏div

js实现隐藏div

隐藏div的几种方法 使用JavaScript隐藏div元素可以通过多种方式实现,以下是几种常见的方法: 方法一:修改style.display属性 将div的display属性设置为"none"…

js实现上传图片预览

js实现上传图片预览

使用FileReader实现图片预览 通过FileReader对象读取用户选择的图片文件,并将其显示在页面上。这种方法适用于现代浏览器。 // HTML部分 <input type="file…