二十四节气包括十二节(立春、惊蛰、清明、立夏、芒种、小暑、立秋、白露、寒露、立冬、大雪、小寒)和十二气(雨水、春分、谷雨、小满、夏至、大暑、处暑、秋分、霜降、小雪、冬至、大寒)。
> 节气的计算使用了[寿星天文历](http://www.nongli.net/sxwnl)的算法。
节气先后顺序为以冬至开始,以大雪结束,通常冬至位于阳历的上一年。
1. getJie()
> 获取节令名(字符串),当匹配到键为`DA_XUE`的节令时,也返回中文的`大雪`,未匹配时返回空字符串
2. getQi()
> 获取气令名(字符串),当匹配到键为`DONG_ZHI`的气令时,也返回中文的`冬至`,未匹配时返回空字符串
3. getJieQi()
> 获取节气名(字符串),当匹配到键为`DA_XUE`的节令时,也返回中文的`大雪`,当匹配到键为`DONG_ZHI`的气令时,也返回中文的`冬至`,未匹配时返回空字符串
4. getJieQiTable()
> 获取当年的节气表(键值对方式,键为节气名称,值为对应阳历。)
5. getJieQiList()
> 获取当年的节气名称(按时间先后排序),由于js中getJieQiTable无法排序,所以提供该方法,某些语言(如java)中getJieQiTable已经排序,所以不提供该方法。
注意:为了在任何一天都能获取到上一节气、下一节气而不用考虑跨年的问题,在头部追加一个键为`DA_XUE`的节令来表示上个节气周期末的大雪;在最后追加一个键为`DONG_ZHI`的气令来表示阳历年末的冬至;同时,在最后追加一个键为`XIAO_HAN`的节令来表示下一阳历年初的小寒,追加一个键为`DA_HAN`的气令来表示下一阳历年初的大寒,追加一个键为`LI_CHUN`的气令来表示下一阳历年初的立春,追加`YU_SHUI`表示雨水,追加`JING_ZHE`表示惊蛰。所以最终节气表如下:
>DA_XUE, 冬至, 小寒, 大寒, 立春, 雨水, 惊蛰, 春分, 清明, 谷雨, 立夏, 小满, 芒种, 夏至, 小暑, 大暑, 立秋, 处暑, 白露, 秋分, 寒露, 霜降, 立冬, 小雪, 大雪, DONG_ZHI, XIAO_HAN, DA_HAN, LI_CHUN, YU_SHUI, JING_ZHE
其中`冬至`到`大雪`为一个节气周期,`DA_XUE`和`冬至`位于阳历上一年,`小寒`到`DONG_ZHI`位于阳历同一年,`XIAO_HAN`、`DA_HAN`、`LI_CHUN`、`YU_SHUI`、和`JING_ZHE`位于阳历下一年。可参考下方示例打印的节气表辅助理解。
为了更好的封装,单独提供了一个新的JieQi对象,包含节气名称和阳历日期,JieQi对象提供如下方法:
1. getName()
> 获取名称(字符串)
2. getSolar()
> 获取阳历对象
3. isJie()
> 是否节令,返回`true/false`
4. isQi()
> 是否气令,返回`true/false`
同时也为Lunar对象提供了新的方法,更加方便的获取临近的节气:
1. getPrevJieQi(wholeDay)
> 获取上一节气(逆推的第一个节气)。参数`wholeDay`传true/false,true代表按天匹配,false代表按精确时刻匹配。返回`JieQi对象`
2. getNextJieQi(wholeDay)
> 获取下一节气(顺推的第一个节气)。参数`wholeDay`传true/false,true代表按天匹配,false代表按精确时刻匹配。返回`JieQi对象`
3. getCurrentJieQi()
> 获取当前节气,返回`JieQi对象`,当天无节气返回null
4. getPrevJie(wholeDay)
> 获取上一节令(逆推的第一个节令)。参数`wholeDay`传true/false,true代表按天匹配,false代表按精确时刻匹配。返回`JieQi对象`
5. getNextJie(wholeDay)
> 获取下一节令(顺推的第一个节令)。参数`wholeDay`传true/false,true代表按天匹配,false代表按精确时刻匹配。返回`JieQi对象`
6. getCurrentJie()
> 获取当天节令,返回`JieQi对象`,当天无节令返回null
7. getPrevQi(wholeDay)
> 获取上一气令(逆推的第一个气令)。参数`wholeDay`传true/false,true代表按天匹配,false代表按精确时刻匹配。返回`JieQi对象`
8. getNextQi(wholeDay)
> 获取下一气令(顺推的第一个气令)。参数`wholeDay`传true/false,true代表按天匹配,false代表按精确时刻匹配。返回`JieQi对象`
9. getCurrentQi()
> 获取当天气令,返回`JieQi对象`,当天无气令返回null
### 示例代码
```
//农历2020年3月12日是清明节
let d = Lunar.fromYmd(2023,11,10);
console.log('节:'+d.getJie());
console.log('气:'+d.getQi());
console.log('节气:'+d.getJieQi());
//获取节气表
const jieQi = d.getJieQiTable();
//获取立春交接的准确时间
let lcIndex = jieQi.findIndex((element):boolean => element.name == '立春');
console.log('立春:'+jieQi[lcIndex].solar.toYmdHms());
//所有节气及时间
const l = d.getJieQiList();
for (let i=0, j=l.length; i<j; i++){
let index = jieQi.findIndex((element):boolean => element.name == l[i]);
console.log(jieQi[index].name + ' = ' + jieQi[index].solar.toYmdHms());
}
//获取上(下)一个节气
d = Lunar.fromDate(new Date());
const prev = d.getPrevJieQi();
console.log('上一节气 = ' + prev.getName() + ' ' +prev.getSolar().toYmdHms());
const next = d.getNextJieQi();
console.log('下一节气 = ' + next.getName() + ' ' +next.getSolar().toYmdHms());
```
- 关于cux-calendar
- 简要介绍
- 快速开始
- 阳历 Solar
- 实例化
- toString
- 获取年、月、日
- 儒略日
- 获取星期
- 判断是否闰年
- 节日
- 星座
- 日期推移
- 阳历日期相减
- 日期比较
- 薪资比例
- 阳历转阴历
- 阳历周 SolarWeek
- 实例化
- toString
- 获取年、月、日
- 一周的起点
- 本月第几周
- 本年第几周
- 本周每一天
- 第一天
- 周的推移
- 阳历月 SolarMonth
- 实例化
- toString
- 获取年、月
- 本月每一天
- 本月每一周
- 月推移
- 阳历季度 SolarSeason
- 实例化
- toString
- 获取年、月
- 本年第几季度
- 本季度每一月
- 季度推移
- 阳历半年 SolarHalfYear
- 实例化
- toString
- 获取年、月
- 本年第几半年
- 本半年每一月
- 半年推移
- 阳历年 SolarYear
- 实例化
- toString
- 获取年
- 本年每一月
- 年推移
- 阳历工具 SolarUtil
- 是否闰年
- 某年天数
- 阳历某月天数
- 某月周数
- 某天位于当年第几天
- 阴历 Lunar
- 实例化
- toString
- 获取年、月、日
- 获取时辰
- 获取星期
- 节日
- 干支
- 禄
- 生肖
- 节气
- 物候
- 数九
- 三伏
- 六曜
- 二十八宿
- 七政(七曜)
- 四宫
- 四神兽
- 彭祖百忌
- 八卦方位
- 吉神方位
- 胎神方位
- 太岁方位
- 冲煞
- 纳音
- 八字
- 旬、旬空(空亡)
- 建除十二值星
- 十二天神
- 每日宜忌
- 时辰宜忌
- 吉神凶煞
- 月相
- 九星
- 日期推移
- 转阳历
- 转佛历
- 转道历
- 阴历月 LunarMonth
- 实例化
- toString
- 获取年、月
- 本月天数
- 是否闰月
- 初一
- 月推移
- 阴历年 LunarYear
- 实例化
- toString
- 获取年
- 获取阴历月
- 获取闰月
- 获取天数
- 获取节气表
- 灶马头
- 三元九运
- 年推移
- 阴历工具 LunarUtil
- 时辰
- 佛历 Foto
- 实例化
- toString
- 获取年、月、日
- 因果犯忌
- 纪念日
- 月斋
- 十斋日
- 六斋日
- 朔望斋
- 观音斋
- 杨公忌
- 二十七星宿
- 转阴历
- 道历 Tao
- 实例化
- toString
- 获取年、月、日
- 节日
- 三会日
- 三元日
- 八节日
- 五腊日
- 八会日
- 戊日
- 天赦日
- 转阴历
- 法定假日 HolidayUtil
- 法定假日
- 数据修正及补充
- 指定日期是否放假或调休
- 指定月份的假期
- 指定年份的假期
- 节日相关的假期
