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 相关文章推荐
有关于eclipse配置spket需要注意的一些地方
Apr 07 Javascript
JS检测图片大小的实例
Aug 21 Javascript
javascript实现数组去重的多种方法
Mar 14 Javascript
jQuery配合coin-slider插件制作幻灯片效果的流程解析
May 13 Javascript
jquery 实现复选框的全选操作实例代码
Jan 24 Javascript
javascript cookie的基本操作(添加和删除)
Jul 24 Javascript
Vue2.0实现将页面中表格数据导出excel的实例
Aug 09 Javascript
Node.js Buffer模块功能及常用方法实例分析
Jan 05 Javascript
vue基础之模板和过滤器用法实例分析
Mar 12 Javascript
ES6 Iterator接口和for...of循环用法分析
Jul 31 Javascript
JS操作JSON常用方法(10w阅读)
Dec 06 Javascript
JavaScript实现简单拖拽效果
Sep 15 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自动加载机制的深入分析
2013/06/08 PHP
PHP图片裁剪与缩放示例(无损裁剪图片)
2017/02/08 PHP
关于JS字符串函数String.replace()
2013/04/07 Javascript
js Map List 遍历使用示例
2013/07/10 Javascript
我的Node.js学习之路(二)NPM模块管理
2014/07/06 Javascript
JavaScript实现弹出模态窗体并接受传值的方法
2016/02/12 Javascript
js和jq使用submit方法无法提交表单的快速解决方法
2016/05/17 Javascript
AngularJS中的表单简单入门
2016/07/28 Javascript
JS获取中文拼音首字母并通过拼音首字母快速查找页面内对应中文内容的方法【附demo源码】
2016/08/19 Javascript
利用python分析access日志的方法
2016/10/26 Javascript
AngularJS中transclude用法详解
2016/11/03 Javascript
Bootstrap源码解读排版(1)
2016/12/23 Javascript
ajaxfileupload.js实现上传文件功能
2019/04/19 Javascript
vue2.0 获取从http接口中获取数据,组件开发,路由配置方式
2019/11/04 Javascript
浅析JS中NEW的实现原理及重写
2020/02/20 Javascript
JS实现前端路由功能示例【原生路由】
2020/05/29 Javascript
[05:53]敌法师的金色冠名ID"BurNIng",是传说,是荣耀
2020/07/11 DOTA
跟老齐学Python之玩转字符串(3)
2014/09/14 Python
Python读取一个目录下所有目录和文件的方法
2016/07/15 Python
python实现决策树
2017/12/21 Python
Python3操作MongoDB增册改查等方法详解
2020/02/10 Python
css3实现波纹特效、H5实现动态波浪效果
2018/01/31 HTML / CSS
css3 给背景设置渐变色的方法
2019/09/12 HTML / CSS
Origins悦木之源香港官网:雅诗兰黛集团高端植物护肤品牌
2018/03/21 全球购物
澳大利亚领先的女帽及配饰公司:Morgan&Taylor
2019/12/01 全球购物
酒店前台接待岗位职责
2013/12/03 职场文书
文体活动实施方案
2014/03/27 职场文书
新闻发布会策划方案
2014/06/12 职场文书
认错检讨书
2014/10/02 职场文书
党风廉政建设个人总结
2015/03/06 职场文书
2015年仓库工作总结
2015/04/09 职场文书
反腐倡廉学习心得体会范文
2015/08/15 职场文书
2019年亲子运动会口号
2019/10/11 职场文书
MySQL query_cache_type 参数与使用详解
2021/07/01 MySQL
idea以任意顺序debug多线程程序的具体用法
2021/08/30 Java/Android
nginx中封禁ip和允许内网ip访问的实现示例
2022/03/17 Servers