JavaScript转换农历类实现及调用方法


Posted in Javascript onJanuary 27, 2013
var LunarDate = { 
madd: new Array(0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334), 
HsString: '甲乙丙丁戊己庚辛壬癸', 
EbString: '子丑寅卯辰巳午未申酉戌亥', 
NumString: "一二三四五六七八九十", 
MonString: "正二三四五六七八九十冬腊", 
CalendarData: new Array(0xA4B, 0x5164B, 0x6A5, 0x6D4, 0x415B5, 0x2B6, 0x957, 0x2092F, 0x497, 0x60C96, 0xD4A, 0xEA5, 0x50DA9, 0x5AD, 0x2B6, 0x3126E, 0x92E, 0x7192D, 0xC95, 0xD4A, 0x61B4A, 0xB55, 0x56A, 0x4155B, 0x25D, 0x92D, 0x2192B, 0xA95, 0x71695, 0x6CA, 0xB55, 0x50AB5, 0x4DA, 0xA5B, 0x30A57, 0x52B, 0x8152A, 0xE95, 0x6AA, 0x615AA, 0xAB5, 0x4B6, 0x414AE, 0xA57, 0x526, 0x31D26, 0xD95, 0x70B55, 0x56A, 0x96D, 0x5095D, 0x4AD, 0xA4D, 0x41A4D, 0xD25, 0x81AA5, 0xB54, 0xB6A, 0x612DA, 0x95B, 0x49B, 0x41497, 0xA4B, 0xA164B, 0x6A5, 0x6D4, 0x615B4, 0xAB6, 0x957, 0x5092F, 0x497, 0x64B, 0x30D4A, 0xEA5, 0x80D65, 0x5AC, 0xAB6, 0x5126D, 0x92E, 0xC96, 0x41A95, 0xD4A, 0xDA5, 0x20B55, 0x56A, 0x7155B, 0x25D, 0x92D, 0x5192B, 0xA95, 0xB4A, 0x416AA, 0xAD5, 0x90AB5, 0x4BA, 0xA5B, 0x60A57, 0x52B, 0xA93, 0x40E95), 
Year: null, 
Month: null, 
Day: null, 
TheDate: null, 
GetBit: function(m, n){ 
return (m >> n) & 1; 
}, 
e2c: function(){ 
this.TheDate = (arguments.length != 3) ? new Date(): new Date(arguments[0], arguments[1], arguments[2]); 
var total, m, n, k; 
var isEnd = false; 
var tmp = this.TheDate.getFullYear(); 
total = (tmp - 1921) * 365 + Math.floor((tmp - 1921) / 4) + this.madd[this.TheDate.getMonth()] + this.TheDate.getDate() - 38; 
if (this.TheDate.getYear() % 4 == 0 && this.TheDate.getMonth() > 1) { 
total++; 
} 
for (m = 0; ; m++) { 
k = (this.CalendarData[m] < 0xfff) ? 11: 12; 
for (n = k; n >= 0; n--) { 
if (total <= 29 + this.GetBit(this.CalendarData[m], n)) { 
isEnd = true; 
break; 
} 
total = total - 29 - this.GetBit(this.CalendarData[m], n); 
} 
if (isEnd) 
break; 
} 
this.Year = 1921 + m; 
this.Month = k - n + 1; 
this.Day = total; 
if (k == 12) { 
if (this.Month == Math.floor(this.CalendarData[m] / 0x10000) + 1) { 
this.Month = 1 - this.Month; 
} 
if (this.Month > Math.floor(this.CalendarData[m] / 0x10000) + 1) { 
this.Month--; 
} 
} 
}, 
GetcDateString: function(){ 
var tmp = ""; 
tmp += this.HsString.charAt((this.Year - 4) % 10); 
tmp += this.EbString.charAt((this.Year - 4) % 12); 
tmp += "年 "; 
if (this.Month < 1) { 
tmp += "(闰)"; 
tmp += this.MonString.charAt(-this.Month - 1); 
} else { 
tmp += this.MonString.charAt(this.Month - 1); 
} 
tmp += "月"; 
tmp += (this.Day < 11) ? "初": ((this.Day < 20) ? "十": ((this.Day < 30) ? "廿": "三十")); 
if (this.Day % 10 != 0 || this.Day == 10) { 
tmp += this.NumString.charAt((this.Day - 1) % 10); 
} 
return tmp; 
}, 
GetLunarDay: function(solarYear, solarMonth, solarDay) { 
if (solarYear < 1921 || solarYear > 2020) { 
return ""; 
} else { 
solarMonth = (parseInt(solarMonth) > 0) ? (solarMonth - 1): 11; 
this.e2c(solarYear, solarMonth, solarDay); 
return this.GetcDateString(); 
} 
} 
};

调用方法:
LunarDate.GetLunarDay(2013, 1, 24);
Javascript 相关文章推荐
javascript中的undefined 与 null 的区别  补充篇
Mar 17 Javascript
JavaScript将数字转换成大写中文的方法
Mar 23 Javascript
jquery实现手风琴效果
Nov 20 Javascript
基于javascript实现图片滑动效果
May 07 Javascript
推荐三款日期选择插件(My97DatePicker、jquery.datepicker、Mobiscroll)
Apr 21 jQuery
捕获未处理的Promise错误方法
Oct 13 Javascript
微信小程序中吸底按钮适配iPhone X方案
Nov 29 Javascript
详解PHP后期静态绑定分析与应用
Mar 21 Javascript
JS实现的RC4加密算法示例
Aug 16 Javascript
总结javascript三元运算符知识点
Sep 28 Javascript
vue-cli 首屏加载优化问题
Nov 06 Javascript
vue+axios 拦截器实现统一token的案例
Sep 11 Javascript
Extjs中TabPane如何嵌套在其他网页中实现思路及代码
Jan 27 #Javascript
Extjs中的GridPanel隐藏列会显示在menuDisabled中解决方法
Jan 27 #Javascript
jQuery ajax serialize()方法的使用以及常见问题解决
Jan 27 #Javascript
js中parseFloat(参数1,参数2)定义和用法及注意事项
Jan 27 #Javascript
Js 冒泡事件阻止实现代码
Jan 27 #Javascript
javascript里模拟sleep(两种实现方式)
Jan 25 #Javascript
调试Javascript代码(浏览器F12及VS中debugger关键字)
Jan 25 #Javascript
You might like
PHP curl伪造IP地址和header信息代码实例
2015/04/27 PHP
php出租房数据管理及搜索页面
2017/05/23 PHP
ThinkPHP整合datatables实现服务端分页的示例代码
2018/02/10 PHP
用jquery模仿的a的title属性的例子
2014/10/22 Javascript
JavaScript实现的一个计算数字步数的算法分享
2014/12/06 Javascript
js实现点击按钮后给Div图层设置随机背景颜色的方法
2015/05/06 Javascript
纯javascript实现分页(两种方法)
2015/08/26 Javascript
javascript截图 jQuery插件imgAreaSelect使用详解
2016/05/04 Javascript
基于jquery实现的银行卡号每隔4位自动插入空格的实现代码
2016/11/22 Javascript
Bootstrap 模态框(Modal)插件代码解析
2016/12/21 Javascript
简单实现bootstrap导航效果
2017/02/07 Javascript
React Native react-navigation 导航使用详解
2017/12/01 Javascript
js实现各浏览器全屏代码实例
2018/07/03 Javascript
Vue源码探究之状态初始化
2018/11/14 Javascript
12个提高JavaScript技能的概念(小结)
2019/05/09 Javascript
解决vue自定义指令导致的内存泄漏问题
2020/08/04 Javascript
Java及python正则表达式详解
2017/12/27 Python
python实现将excel文件转化成CSV格式
2018/03/22 Python
python实现将文件夹内的每张图片批量分割成多张
2019/07/22 Python
浅析使用Python搭建http服务器
2019/10/27 Python
使用pygame实现垃圾分类小游戏功能(已获校级二等奖)
2020/07/23 Python
Python获取excel内容及相关操作代码实例
2020/08/10 Python
在pycharm创建scrapy项目的实现步骤
2020/12/01 Python
英国最大的在线运动补充剂商店:Discount Supplements
2017/06/03 全球购物
微软台湾官方网站:Microsoft台湾
2018/08/15 全球购物
Boden英国官网:英国知名原创时装品牌
2018/11/06 全球购物
美体小铺法国官方网站:The Body Shop法国
2020/06/04 全球购物
学前教育毕业生自荐信范文
2013/12/24 职场文书
英语专业自荐书
2014/06/13 职场文书
骨干教师申报材料
2014/12/17 职场文书
新郎婚礼答谢词
2015/01/04 职场文书
反邪教警示教育活动总结
2015/05/09 职场文书
代理词怎么写
2015/05/25 职场文书
2016年春季运动会加油稿
2015/07/22 职场文书
工作转正自我鉴定范文
2019/06/21 职场文书
python 三边测量定位的实现代码
2021/04/22 Python