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 应该为兔年

Debug

-- (需要浏览器支持console.log)

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)








posted @ 2011-09-27 01:52  斯人  阅读(513)  评论(0)    收藏  举报