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 相关文章推荐
IE autocomplete internet explorer's autocomplete
Jun 30 Javascript
关于URL中的特殊符号使用介绍
Nov 03 Javascript
jQuery把表单元素变为json对象
Nov 06 Javascript
解析jquery中的ajax缓存问题
Dec 19 Javascript
jQuery实现文本框输入同步的方法
Jun 20 Javascript
JavaScript数组去重的五种方法
Nov 05 Javascript
js 定义对象数组(结合)多维数组方法
Jul 27 Javascript
D3.js实现折线图的方法详解
Sep 21 Javascript
JavaScript数组push方法使用注意事项
Oct 30 Javascript
React router动态加载组件之适配器模式的应用详解
Sep 12 Javascript
微信小程序tabbar底部导航
Nov 05 Javascript
layui实现数据分页功能(ajax异步)
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
第十节--抽象方法和抽象类
2006/11/16 PHP
php使用explode()函数将字符串拆分成数组的方法
2015/02/17 PHP
js控制div及网页相关属性的代码
2009/12/19 Javascript
将字符串转换成gb2312或者utf-8编码的参数(js版)
2013/04/10 Javascript
JS增加行复制行删除行的实现代码
2013/11/09 Javascript
angularjs基础教程
2014/12/25 Javascript
JavaScript对象属性检查、增加、删除、访问操作实例
2015/07/08 Javascript
javascript中$(function() {});写与不写有哪些区别
2015/08/10 Javascript
深入理解setTimeout函数和setInterval函数
2016/05/20 Javascript
JavaScript中0和&quot;&quot;比较引发的问题
2016/05/26 Javascript
jQuery树形控件zTree使用小结
2016/08/02 Javascript
H5移动端适配 Flexible方案
2016/10/24 Javascript
浅谈JavaScript find 方法不支持IE的问题
2017/09/28 Javascript
node.js多个异步过程中判断执行是否完成的解决方案
2017/12/10 Javascript
jquery实现动态创建form并提交的方法示例
2019/05/27 jQuery
vue2.x数组劫持原理的实现
2020/04/19 Javascript
[35:29]Secret vs VG 2018国际邀请赛淘汰赛BO3 第三场 8.23
2018/08/24 DOTA
python双向链表实现实例代码
2013/11/21 Python
基于Python os模块常用命令介绍
2017/11/03 Python
Python cookbook(数据结构与算法)保存最后N个元素的方法
2018/02/13 Python
解决Python 中英文混输格式对齐的问题
2018/07/16 Python
基于python3实现socket文件传输和校验
2018/07/28 Python
为什么说Python可以实现所有的算法
2019/10/04 Python
flask 框架操作MySQL数据库简单示例
2020/02/02 Python
python+django+selenium搭建简易自动化测试
2020/08/19 Python
python实现图片,视频人脸识别(dlib版)
2020/11/18 Python
CSS3 实现的加载动画
2020/12/07 HTML / CSS
瑞典快乐袜子:Happy Socks
2018/02/16 全球购物
德国专业木制品经销商:Holz-Direkt24
2019/12/26 全球购物
小学教师学期末自我评价
2013/09/25 职场文书
农民工工资支付承诺函
2014/03/31 职场文书
学习普通话的体会
2014/11/07 职场文书
用Python监控你的朋友都在浏览哪些网站?
2021/05/27 Python
MongoDB日志切割的三种方式总结
2021/09/15 MongoDB
关于JS中的作用域中的问题思考分享
2022/04/06 Javascript
Oracle查看表空间使用率以及爆满解决方案详解
2022/07/23 Oracle