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 类与静态类的实现
Apr 01 Javascript
form表单只提交数据而不进行页面跳转的解决方案
Sep 18 Javascript
javascript打印html内容功能的方法示例
Nov 28 Javascript
Javascript前端UI框架Kit使用指南之Kitjs简介
Nov 28 Javascript
javascript禁止访客复制网页内容的实现代码
Aug 05 Javascript
快速学习jQuery插件 Cookie插件使用方法
Dec 01 Javascript
无缝滚动的简单实现代码(推荐)
Jun 07 Javascript
从零开始学习Node.js系列教程六:EventEmitter发送和接收事件的方法示例
Apr 13 Javascript
jQuery中.attr()和.data()的区别分析
Sep 03 jQuery
p5.js入门教程之平滑过渡(Easing)
Mar 16 Javascript
vue.js使用v-if实现显示与隐藏功能示例
Jul 06 Javascript
利用JS动态生成隔行换色HTML表格的两种方法
Oct 09 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极大的增强功能和性能
2006/10/09 PHP
关于PHP内存溢出问题的解决方法
2013/06/25 PHP
php检测apache mod_rewrite模块是否安装的方法
2015/03/14 PHP
jquery 操作DOM案例代码分享
2012/04/05 Javascript
JS使用getComputedStyle()方法获取CSS属性值
2014/04/23 Javascript
JavaScript实现Flash炫光波动特效
2015/05/14 Javascript
原生js实现的贪吃蛇网页版游戏完整实例
2015/05/18 Javascript
详细讲解JavaScript中的this绑定
2016/10/10 Javascript
JavaScript判断变量名是否存在数组中的实例
2017/12/28 Javascript
Node.JS段点续传:Nginx配置文件分段下载功能的实现方法
2018/03/12 Javascript
Angular6 写一个简单的Select组件示例
2018/08/20 Javascript
基于Vue中使用节流Lodash throttle详解
2019/10/30 Javascript
Vue 实现v-for循环的时候更改 class的样式名称
2020/07/17 Javascript
Vue 根据条件判断van-tab的显示方式
2020/08/03 Javascript
在Gnumeric下使用Python脚本操作表格的教程
2015/04/14 Python
Python中在for循环中嵌套使用if和else语句的技巧
2016/06/20 Python
深入理解Django的自定义过滤器
2017/10/17 Python
简单了解python的break、continue、pass
2019/07/08 Python
python3 批量获取对应端口服务的实例
2019/07/25 Python
Python类反射机制使用实例解析
2019/12/30 Python
详解python常用命令行选项与环境变量
2020/02/20 Python
浅谈python中频繁的print到底能浪费多长时间
2020/02/21 Python
python实现QQ邮箱发送邮件
2020/03/06 Python
简单聊聊H5的pushState与replaceState的用法
2018/04/03 HTML / CSS
夜大自我鉴定
2013/10/31 职场文书
银行实习鉴定
2013/12/13 职场文书
学历公证委托书
2014/04/09 职场文书
给学校的建议书范文
2014/05/15 职场文书
党员个人整改方案及措施
2014/10/25 职场文书
2014年保洁员工作总结
2014/11/19 职场文书
师德师风学习材料
2014/12/19 职场文书
农村老人去世追悼词
2015/06/23 职场文书
在人间读书笔记
2015/06/30 职场文书
干部考核工作总结2015
2015/07/24 职场文书
用Python将库打包发布到pypi
2021/04/13 Python
Linux中各个目录的作用与内容
2022/06/28 Servers