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 相关文章推荐
解析offsetHeight,clientHeight,scrollHeight之间的区别
Nov 20 Javascript
JavaScript中奇葩的假值示例应用
Mar 11 Javascript
JavaScript实现生成GUID(全局统一标识符)
Sep 05 Javascript
JavaScript中的值类型转换介绍
Dec 31 Javascript
javascript使用avalon绑定实现checkbox全选
May 06 Javascript
JavaScript资源预加载组件和滑屏组件的使用推荐
Mar 10 Javascript
分享12个非常实用的JavaScript小技巧
May 11 Javascript
AngularJS使用ng-inlude指令加载页面失败的原因与解决方法
Jan 19 Javascript
vue-router两种模式区别及使用注意事项详解
Aug 01 Javascript
基于vue-cli3+typescript的tsx开发模板搭建过程分享
Feb 28 Javascript
Vue-cli4 配置 element-ui 按需引入操作
Sep 11 Javascript
jQuery+ajax实现文件上传功能
Dec 22 jQuery
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
各种战术和打法的原创者
2020/03/04 星际争霸
PHP array_push 数组函数
2009/12/26 PHP
分享PHP-pcntl 实现多进程代码
2016/09/30 PHP
php删除一个路径下的所有文件夹和文件的方法
2018/02/07 PHP
JavaScript中的Document文档对象
2008/01/16 Javascript
分享几个超级震憾的图片特效
2012/01/08 Javascript
JS写的贪吃蛇游戏(个人练习)
2013/07/08 Javascript
javascript中eval解析JSON字符串
2016/02/27 Javascript
Angularjs 自定义服务的三种方式(推荐)
2016/08/02 Javascript
vue弹窗消息组件的使用方法
2020/09/24 Javascript
Vue组件中的data必须是一个function的原因浅析
2018/09/03 Javascript
js作用域和作用域链及预解析
2019/04/11 Javascript
Python文件操作类操作实例详解
2014/07/11 Python
python中日期和时间格式化输出的方法小结
2015/03/19 Python
Python基于pillow判断图片完整性的方法
2016/09/18 Python
Python入门之三角函数atan2()函数详解
2017/11/08 Python
Python实现七彩蟒蛇绘制实例代码
2018/01/16 Python
使用python编写监听端
2018/04/12 Python
Python中的单行、多行、中文注释方法
2018/07/19 Python
Python读取配置文件(config.ini)以及写入配置文件
2020/04/08 Python
tensorflow基于CNN实战mnist手写识别(小白必看)
2020/07/20 Python
selenium+headless chrome爬虫的实现示例
2021/01/08 Python
Nili Lotan官网:Nili Lotan同名品牌
2018/01/07 全球购物
北欧最好的童装网上商店:Babyshop
2019/09/15 全球购物
.net面试题
2016/09/17 面试题
活动策划邀请函
2014/02/06 职场文书
母亲节演讲稿
2014/05/27 职场文书
2014年安全员工作总结
2014/11/13 职场文书
晚会闭幕词
2015/01/28 职场文书
营运督导岗位职责
2015/04/10 职场文书
节约用电倡议书
2015/04/28 职场文书
婚礼伴郎致辞
2015/07/28 职场文书
导游词之湖北武当山
2019/09/23 职场文书
导游词之任弼时故居
2020/01/07 职场文书
如何用PHP实现多线程编程
2021/05/26 PHP
PyTorch 实现L2正则化以及Dropout的操作
2021/05/27 Python