Javascript历法算法类
历法算法类
功能支持: 公历(星期、节日)、农历(中文化、干支、节气、生肖、节日、闰月)、伊历(马来语、阿拉伯语) 农历日期选择范围: 1900-1-31[正月初一] ~ 2050-3-21[二月廿九] (无闰月map支持) 权威参照: 农历以日梭万年历(下载地址)为准,伊历以al-islam.com为准
Wiki
闰月 农历与农业耕种相关,为了协调回归年与农历年的矛盾,防止农历年月与回归年及四季脱节,每逢闰年增加的一个月;以查表法实现
立春 每年2月4日或5日太阳到达黄经315度时,农历的开始,干支的分界(可以确定一定为公历2月份);以查表法实现
干支 天干与地支搭配共60对循环计数,类似60进制
干支纪年 以甲子开始,60年一个周期,以立春为界
算法原理:
a.以1900年立春为起始范围,确定其年立春后为庚子年,与甲子差值36
b.月份(立春为2月)和日期上立春分界
干支纪月 天干由该月所在年的天干决定,地支由一太阳年中二十四节气其中的十二节气分界
算法原理:
a.以1900年第一个节气(小寒)为起始范围,确定其后为丁丑月,差值12
b.日期上以当月第一个节气分界
干支纪日 60日一个周期,每80年,干支纪日对应的公历月日日期若没有遇到能被100但非400整除的公元年,会反复一次循环
算法原理:
a.以1900-1-1为起始范围,确定为甲戌日,差值10
b.通过换算当月1号与起始日差值计算
生肖生肖究竟是从立春开始算,还是从正月初一开始算,在民间以及民俗学专家中都有很大的争议,参照部分权威历法,以正月初一开始算
Future
1. 泰国佛历 2. 星座 3. 万年历
Update
[2011.9.26] 1. 按jsdoc规范更新注释 2. 扩展G.date.format方法 3. 调整接口,参数省略策略统一为 G.date.format/G.date.lunarTpl/G.date.islTpl 允许省略 4. 获取生肖名拆分为独立接口 G.date.toSx()
Test case
1. 闰月(修正闰月下一月第一天仍为闰月) 2. 除夕日与年份相关 3. 自测了2011、2012、2013全年,随机年份完全吻合
Bugs
1. 除夕2. 1985.1 农历日差了一天3. 2月份干支年没有递增4. 2012.1 应该为兔年
demo
今日农历(内置模板):
今日伊历(内置模板):
API (由于最近接口调整,文档未能及时更新,故更多详细内容请直接查阅源码)
1.从date对象获取日期:
G.date.getDate(date)
2.返回某年第n个节气日期:
G.date.getDateBySolar(y, n)
3.返回公历月份天数:
G.date.getDaysByMonth(y, m)
4.返回公历年份的闰月月份:
G.date.getLeapMonth(y)
5.返回农历月份天数:
G.date.getDaysByLunarMonth(y)
6.返回某年闰月天数:
G.date.getLeapDays(y)
7.返回公历年份天数:
G.date.getDaysByYear(y)
8.返回节日名按月、日(支持公历/农历):
G.date.getFeast(m, d, type, y)
9.返回节气名按公历年、月、日:
G.date.getSolar(y, m, d)
10.根据offset计算干支:
G.date.cyclical(n)
11.公历转农历:
G.date.toLunar(y, m, d)
12.公历转干支:
G.date.toGz(y, m, d)
13.公历转中文格式化农历:
G.date.formatLunar(y, m, d)
14.公历转中文农历模板:
G.date.lunarTpl(y, m, d, tpl)
15.公历转伊历:
G.date.toIsl(y, m, d)
16.公历转格式化伊历:
G.date.formatIsl(y, m, d)
17.公历转伊历模板:
G.date.islTpl(y, m, d, tpl)
18.检查是否date对象:
G.date.isDate(date)
19.格式化日期对象:
G.date.format(pattern, date)
20.公历转生肖:
G.date.toSx(y, m, d)
浙公网安备 33010602011771号