GitHub 您所在的位置:网站首页 阳历转八字 GitHub

GitHub

2024-06-20 13:18| 来源: 网络整理| 查看: 265

Lunisolar

minzip version bulid

【线上文档请点这里】

lunisolar 是一个使用Typescript编写的专业农历库, 可取得各类农历数据,参考中国中代书籍,数据来源有依有据。支持多语言(可自定义语言包),支持自定义插件。

具体包含以下功能:

✅公历-阴历互转 ✅阴历查询 ✅八字查询 ✅节气日期查询 ✅Markers(日期备注、节日功能) ✅胎神占方 (插件) ✅五行纳音 (插件) ✅神煞系统 (插件) ✅建除十二神 ✅神煞宜忌 ✅时辰凶吉 ✅八字增强 (插件) ✅八字十神 ✅四柱神煞 ⏳紫微斗数 (planning) ...更多功能开发中 快速上手 前言 * 为何制作此库 * 阴历和阳历 * 年和岁 * 节和气 * 生肖和换岁 * 换日 * 其它 1 安装 1.1 Nodejs 1.2 浏览器直接通过script引入 2 解释 (创建Lunisolar对象) 2.1 解释 (Parse) 2.2 克隆 Lunisolar 实例对象 2.3 阴历反查 3 Lunisolar类 格式化数据 format 时间差 diff 时间加减 4. 阴历数据 4.1 取得阴历 4.2 Lunar类 5 八字(天干地支) 5.1 取得数据 5.2 Char8类 5.3 SB类 5.4 Stem天干类 5.5 Branch地支类 5.6 Element5五行类 5.7 Trigram8 八卦类 5.8 八字增强插件 6 节气 7 胎神 7.1 用法 8 纳音 9 建除十二神 10 神煞宜忌 11 日期备注 Markers 插件 plugins 国际化 * 加载插件语言包 * 对语言包进行自定义 支持 快速上手 // 引入 import lunisolar from 'lunisolar' // 使用 const d = lunisolar('2022/07/18 14:40') // --- format --- d.format('lY年 lM(lL)lD lH時') // 可取得阴历日期 '二〇二二年 六月(大)二十 未時' d.format('cY cM cD cH') // 可取得八字:'壬寅 丁未 壬申 丁未' d.format('YYYY-MM-DD HH:mm:ss') // 2022-07-18 14:40:00 // --- 阴历--- d.lunar.toString() // 二〇二二年六月二十未時 `${d.lunar}` // 二〇二二年六月二十未時 d.lunar.year // 2022 d.lunar.getYearName() // 二〇二二 d.lunar.month // 6 (如果是闰六月会返回106) d.lunar.getMonthName() // 六月 d.lunar.day // 20 d.lunar.getDayName() // 二十 d.lunar.hour // 7 (返回从0开始算的时辰下标) d.lunar.getHourName() // 未 d.lunar.isLeapMonth // false (是否闰月) // --- 八字 ---- `${d.char8}` // 壬寅 丁未 壬申 丁未 d.char8.year.toString() // 壬寅 (取得年柱) d.char8.month.toString() // 丁未 (取得月柱) d.char8.day.toString() // 壬申 (取得日柱) d.char8.hour.toString() // 丁未 (取得时柱) d.char8.year.stem.toString() // 壬 (年柱天干) d.char8.year.branch.toString() // 寅 (年柱地支) d.char8.year.branch.hiddenStems // [甲, 丙, 戊] (地支藏干的天干对象列表,顺序为本气、中气、余气) // ...其它柱类似 // 节气 lunisolar('2022-07-23').solarTerm?.toString() // 大暑 (返回当天的节气,如果不是节气则solarTerm().solarTerm返回null) // 阴历反查 (阴历转公历) lunisolar.fromLunar({ year: 2022, month: 10, day: 25 }).fromat('YYYY-MM-DD') // 2022-11-18 前言 * 为何制作此库

昔见不同版本日历(包括纸质日历和各类日历软件),其所示宜忌有所不同,更有相矛盾者,不知如何取用,故疑其推算依据是否误,本着宏扬传统文化之精神,离所有职务,查阅各资料文案,以制此库。

* 阴历和阳历

现所用的中国传统历法,我们常称为农历,农历是阴阳合历,即包含了阴历和阳历,所以此库命名为lunisolar。

农历中,通过月相圆缺纪月,此属于阴历范畴,本库会以一个Lunar对象记录转换好的阴历数据。 而公历与阴历的转换没规律可言,故采用查表法进行转换,其数据来自香港天文台【公历与农历日期对照表】。其可查询年份范围为[1901,2100]。数据抓取和压缩的代码见仓库 lunar-crawler,此处不作详细介绍。

属于阳历范畴的内容比较多,有二十四节气、天干地支等,传统很多术数多以阳历排盘,如八字、奇门遁甲...(也有少数以阴历排盘的,如紫微斗数)。其中二十四节气是阳历中十分重要的部分,其影响天干地支的换岁和换月。

* 年和岁

在传统上,年和岁是两个不同的概念。

年 是指阴历正月初一到下一个正月初一的一个周期。

岁 是指太阳连续两次通过春分点的时间间隔,古人一般用‘冬至点’来观测,现代称作回归年(tropical year),也叫 太阳年(solar year)。一个周期结束而开始下一个周期,称为换岁。

$$1回归年 = 365.2421990741日 = 365天5小時48分46秒$$

* 节和气

我们常说的二十四节气,其实分为节和气两种,共十二节和十二气,节和气交替出现。天干地支纪月是以节换月的。

节 气 孟春 寅月 立春 雨水 春 仲春 卯月 惊蛰 春分 季春 辰月 清明 谷雨 孟夏 巳月 立夏 小满 夏 仲夏 午月 芒种 夏至 季夏 未月 小暑 大暑 孟秋 申月 立秋 处暑 秋 仲秋 酉月 露水 秋分 季秋 戌月 寒露 霜降 孟冬 亥月 立冬 小雪 冬 仲冬 子月 大雪 冬至 季冬 丑月 小寒 大寒

实际上,节气是某一个时刻,而这个时刻并不是固定在某天的某个时辰。但由于数据源只精确到日,所以本库的交节(更换八字月柱),也是以日为准。

* 生肖和换岁

我们知道天干地支是基于二十四节气来定的。在民间,如八字命理这类术数,通常以立春换岁,即到了立春,便更换下一个天干地支纪年,例如今年为甲子年,则到下一个立春,则换成乙丑年。

但是,并不是所有术数都是以立春换岁,例如中医的五运六气,则以大寒日换岁。 而奇门遁甲则以冬至换岁,中气换月。

lunisolar默认使用立春换岁, 当然你也可以自定义换岁的节气。

生肖:生肖与十二地支是对应的,所以实际上生肖也是按节气更换,而不少传统述数系统都是以立春换岁,所以生肖应当也是按立春更换。

但是,跟据 中国大陆国家标准:编号**GB/T 33661-2017 《农历的编算和颁行》**规定,

“干支纪年的循环参考时间:对应于北京时间公历1984年2月2日0时起到1985年2月19日24时截止的农历年为甲子年。”

如按此标准的话,应该正月初一换岁,即生肖在正月初一更换。 这与传统术数的计算方式有所冲突,也许是为了方便大众记忆与使用。 由于大部分术数系统并不以正月初一换岁,所以lunisolar默认并不跟随此标准进行换岁(虽然可以通过配置设置成与国标一致,但不建议)。

* 换日

传统子时是每一天的开始,子时对应的时间为 [23:00, 01:00), 所以lunisolar会在23:00进行换日。

* 其它

moment.js 和 dayjs 是两个比较出名的时间工具库,为了符合大家的使用习惯,lunisolar针对公历的部分操作将会尽量向dayjs看齐,并参考了其代码设计。针对公历部分,尽管lunisolar也有类似dayjs的方法,但并不会cover其所有功能,如果你仅仅是对公历进行操作,推荐使用dayjs。lunisolar重点在于农历部分,例如Lunisolar的format方法和diff方法包含dayjs这两个方法的功能并与之保持一致,同时加入了对农历的处理,具体功能及使用请继续阅读文档。

1 安装 1.1 Nodejs npm install lunisolar # or yarn add lunisolar

引入

import lunisolar from 'lunisolar'

如果你使用typescript你需要设置:

{ //tsconfig.json "compilerOptions": { "esModuleInterop": true, "allowSyntheticDefaultImports": true, } }

否则你必需这样引入:

import * as lunisolar from 'lunisolar' 1.2 浏览器直接通过script引入


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有