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的gzip静态压缩方法
Jan 05 Javascript
ExtJs的Date格式字符代码
Dec 30 Javascript
JavaScript数值转换的三种方式总结
Jul 31 Javascript
Jquery全选与反选点击执行一次的解决方案
Aug 14 Javascript
JS实现的N多简单无缝滚动代码(包含图文效果)
Nov 06 Javascript
ionic隐藏tabs的方法
Aug 29 Javascript
微信小程序 删除项目工程实现步骤
Nov 10 Javascript
JavaScript 下载svg图片为png格式
Jun 21 Javascript
Angular7.2.7路由使用初体验
Mar 01 Javascript
JavaScript面试技巧之数组的一些不low操作
Mar 22 Javascript
小程序根据手机机型设置自定义底部导航距离
Jun 04 Javascript
微信小程序实现页面分享onShareAppMessage
Aug 12 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大批量数据操作时临时调整内存与执行时间的方法
2011/04/20 PHP
php学习笔记 面向对象中[接口]与[多态性]的应用
2011/06/16 PHP
php多维数组去掉重复值示例分享
2014/03/02 PHP
PHPExcel实现的读取多工作表操作示例
2020/04/14 PHP
关于extjs treepanel复选框选中父节点与子节点的问题
2013/04/02 Javascript
js左右弹性滚动对联广告代码分享
2014/02/19 Javascript
javascript实现获取浏览器版本、操作系统类型
2015/01/29 Javascript
nodejs处理图片的中间件node-images详解
2017/05/08 NodeJs
socket.io与pm2(cluster)集群搭配的解决方案
2017/06/02 Javascript
javaScript产生随机数的用法小结
2018/04/21 Javascript
Vue框架里使用Swiper的方法示例
2018/09/20 Javascript
小程序登录态管理的方法示例
2018/11/13 Javascript
详解vue中的computed的this指向问题
2018/12/05 Javascript
基于jquery ajax的多文件上传进度条过程解析
2019/09/11 jQuery
在SSM框架下用laypage和ajax实现分页和数据交互的方法
2019/09/27 Javascript
解决vue的过渡动画无法正常实现问题
2019/10/31 Javascript
[56:48]FNATIC vs EG 2019国际邀请赛小组赛 BO2 第二场 8.15
2019/08/16 DOTA
python 输出一个两行字符的变量
2009/02/05 Python
Python 实现简单的电话本功能
2015/08/09 Python
python编码总结(编码类型、格式、转码)
2016/07/01 Python
Python爬虫爬取一个网页上的图片地址实例代码
2018/01/16 Python
Python cookbook(数据结构与算法)在字典中将键映射到多个值上的方法
2018/02/18 Python
Django框架的中的setting.py文件说明详解
2018/10/15 Python
python调用百度地图WEB服务API获取地点对应坐标值
2019/01/16 Python
Python面向对象思想与应用入门教程【类与对象】
2019/04/12 Python
Django之使用内置函数和celery发邮件的方法示例
2019/09/16 Python
Python调用shell命令常用方法(4种)
2020/05/11 Python
关于老式浏览器兼容HTML5和CSS3的问题
2016/06/01 HTML / CSS
雷蛇美国官网:Razer
2020/04/03 全球购物
C#笔试题
2015/07/14 面试题
国贸类专业毕业生的求职信分享
2013/12/08 职场文书
2015年幼儿园毕业感言
2014/02/12 职场文书
协商一致解除劳动合同协议书
2014/09/14 职场文书
热情服务标语
2014/10/07 职场文书
幼儿园亲子活动通知
2015/04/24 职场文书
听证会主持词
2015/07/03 职场文书