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 相关文章推荐
JS获取浏览器语言动态加载JS文件示例代码
Oct 31 Javascript
setinterval()与clearInterval()JS函数的调用方法
Jan 21 Javascript
JS控制网页动态生成任意行列数表格的方法
Mar 09 Javascript
初步使用bootstrap快速创建页面
Mar 03 Javascript
BootstrapTable+KnockoutJS自定义T4模板快速生成增删改查页面
Aug 01 Javascript
Bootstrap框架结合jQuery仿百度换肤功能实例解析
Sep 17 Javascript
React+react-dropzone+node.js实现图片上传的示例代码
Aug 23 Javascript
在vue中更换字体,本地存储字体非引用在线字体库的方法
Sep 28 Javascript
Vue2.0使用嵌套路由实现页面内容切换/公用一级菜单控制页面内容切换(推荐)
May 08 Javascript
JS实现可用滑块滑动的缓动图代码
Sep 01 Javascript
原生javascript运动函数的封装示例【匀速、抛物线、多属性的运动等】
Feb 23 Javascript
谈一谈vue请求数据放在created好还是mounted里好
Jul 27 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&amp;&amp;mysql)五
2006/10/09 PHP
WINXP下apache+php4+mysql
2006/11/25 PHP
php中几种常见安全设置详解
2010/04/06 PHP
PHP的SQL注入实现(测试代码安全不错)
2011/02/27 PHP
linux命令之调试工具strace的深入分析
2013/06/03 PHP
PHP自定义函数获取URL中一级域名的方法
2016/08/23 PHP
jQuery 研究心得 取得属性的值
2007/11/30 Javascript
JavaScript 对话框和状态栏使用说明
2009/10/25 Javascript
来自国外的14个图片放大编辑的jQuery插件整理
2010/10/20 Javascript
解决jquery的datepicker的本地化以及Today问题
2012/05/23 Javascript
js 3种归并操作的实例代码
2013/10/30 Javascript
用js+iframe形成页面的一种遮罩效果的具体实现
2013/12/31 Javascript
微信小程序 后台https域名绑定和免费的https证书申请详解
2016/11/10 Javascript
ajax 提交数据到后台jsp页面及页面跳转问题
2017/01/19 Javascript
微信小程序获取用户openId的实现方法
2017/05/23 Javascript
Angular异步变同步处理方法
2018/08/13 Javascript
JS实现换肤功能的方法实例详解
2019/01/30 Javascript
axios解决高并发的方法:axios.all()与axios.spread()的操作
2020/11/09 Javascript
[01:25]2014DOTA2国际邀请赛 zhou分析LGD比赛情况
2014/07/14 DOTA
[46:02]DOTA2上海特级锦标赛D组资格赛#2 Liquid VS VP第二局
2016/02/28 DOTA
python k-近邻算法实例分享
2014/06/11 Python
python 采集中文乱码问题的完美解决方法
2016/09/27 Python
windows下python安装paramiko模块和pycrypto模块(简单三步)
2017/07/06 Python
Windows下将Python文件打包成.EXE可执行文件的方法
2018/08/03 Python
python产生模拟数据faker库的使用详解
2020/11/04 Python
Python爬虫实例之2021猫眼票房字体加密反爬策略(粗略版)
2021/02/22 Python
CSS3样式linear-gradient的使用实例
2017/01/16 HTML / CSS
如何查找和删除数据库中的重复数据
2014/11/05 面试题
Java中各种基本数据类型的默认值都是什么
2016/12/22 面试题
J2EE中的容器都包括哪些
2013/08/21 面试题
大学共青团员个人自我评价
2014/04/16 职场文书
预备党员转正材料
2014/12/19 职场文书
2015年优质护理服务工作总结
2015/04/08 职场文书
幼儿园家长心得体会
2016/01/21 职场文书
Mysql案例刨析事务隔离级别
2021/09/25 MySQL
20180830晚上第一届KSL半决赛 雨神vs解冻(二龙 三炮解说)
2022/04/01 星际争霸