JavaScript二十四节气算法的实现(附源码)
上一篇讲了JavaScript公历转农历算法的实现,这篇再讲一下24节气的实现,24节气即:
立春 雨水 惊蛰 春分 清明 谷雨
立夏 小满 芒种 夏至 小暑 大暑
立秋 处暑 白露 秋分 寒露 霜降
立冬 小雪 大雪 冬至 小寒 大寒
24节气是中国人通过观察太阳周年运动,认知一年中时令、气候、物候等方面变化规律形成的知识体系和社会实践,是上古农耕文明的产物,千年以来指导着中国传统农业生产和日常生活,可以很好的反映气象变化和季节的更替,其实24节气算是一种阳历,是有规律可循的,计算它有相关的公示,下面还是直接上代码,很简单,都有注释,下面的代码可以计算任何21世纪年份的节气。
/**
* 二十四节气
*/
class solarTerms{
//取得某一年的节气(21世纪的年份)
getSolarTermsByYear(year){
let y=parseInt((""+year).substr(2,2));//年的后两位
let data={};
data.小寒=""+year+"-1-"+(Math.floor(y*0.2422+5.4055)-Math.floor(y/4));
data.大寒=""+year+"-1-"+(Math.floor(y*0.2422+20.12)-Math.floor(y/4));
data.立春=""+year+"-2-"+(Math.floor(y*0.2422+3.87)-Math.floor(y/4));
data.雨水=""+year+"-2-"+(Math.floor(y*0.2422+18.73)-Math.floor(y/4));
data.惊蛰=""+year+"-3-"+(Math.floor(y*0.2422+5.63)-Math.floor(y/4));
data.春分=""+year+"-3-"+(Math.floor(y*0.2422+20.646)-Math.floor(y/4));
data.清明=""+year+"-4-"+(Math.floor(y*0.2422+4.81)-Math.floor(y/4));
data.谷雨=""+year+"-4-"+(Math.floor(y*0.2422+20.1)-Math.floor(y/4));
data.立夏=""+year+"-5-"+(Math.floor(y*0.2422+5.52)-Math.floor(y/4));
data.小满=""+year+"-5-"+(Math.floor(y*0.2422+21.04)-Math.floor(y/4));
data.芒种=""+year+"-6-"+(Math.floor(y*0.2422+5.678)-Math.floor(y/4));
data.夏至=""+year+"-6-"+(Math.floor(y*0.2422+21.37)-Math.floor(y/4));
data.小暑=""+year+"-7-"+(Math.floor(y*0.2422+7.108)-Math.floor(y/4));
data.大暑=""+year+"-7-"+(Math.floor(y*0.2422+22.83)-Math.floor(y/4));
data.立秋=""+year+"-8-"+(Math.floor(y*0.2422+7.5)-Math.floor(y/4));
data.处暑=""+year+"-8-"+(Math.floor(y*0.2422+23.13)-Math.floor(y/4));
data.白露=""+year+"-9-"+(Math.floor(y*0.2422+7.646)-Math.floor(y/4));
data.秋分=""+year+"-9-"+(Math.floor(y*0.2422+23.042)-Math.floor(y/4));
data.寒露=""+year+"-10-"+(Math.floor(y*0.2422+8.318)-Math.floor(y/4));
data.霜降=""+year+"-10-"+(Math.floor(y*0.2422+23.438)-Math.floor(y/4));
data.立冬=""+year+"-11-"+(Math.floor(y*0.2422+7.438)-Math.floor(y/4));
data.小雪=""+year+"-11-"+(Math.floor(y*0.2422+22.36)-Math.floor(y/4));
data.大雪=""+year+"-12-"+(Math.floor(y*0.2422+7.18)-Math.floor(y/4));
data.冬至=""+year+"-12-"+(Math.floor(y*0.2422+21.94)-Math.floor(y/4));
return data;
}
//取得某一天的节气,不是节气则返回空字符串
getSolarTermsByYmd(ymd){
ymd=ymd.replaceAll("/","-");
let y=ymd.split("-")[0];
let data=this.getSolarTermsByYear(y);
//键值对换
data=Object.keys(data).reduce(function(newData,key){
newData[data[key]]=key;
return newData;
},{});
if(data.hasOwnProperty(ymd)){
return data[ymd];
}else{
return "";
}
}
}
使用方法也很简单,例如计算2023年的节气时间表,只需要
let SolarTerms=new solarTerms();
SolarTerms.getSolarTermsByYear(2023);
结果如下:
小寒 -> 2023-1-5
大寒 -> 2023-1-20
立春 -> 2023-2-4
雨水 -> 2023-2-19
惊蛰 -> 2023-3-6
春分 -> 2023-3-21
清明 -> 2023-4-5
谷雨 -> 2023-4-20
立夏 -> 2023-5-6
小满 -> 2023-5-21
芒种 -> 2023-6-6
夏至 -> 2023-6-21
小暑 -> 2023-7-7
大暑 -> 2023-7-23
立秋 -> 2023-8-8
处暑 -> 2023-8-23
白露 -> 2023-9-8
秋分 -> 2023-9-23
寒露 -> 2023-10-8
霜降 -> 2023-10-24
立冬 -> 2023-11-8
小雪 -> 2023-11-22
大雪 -> 2023-12-7
冬至 -> 2023-12-22
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐


所有评论(0)