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字符串拼接的效率问题
Dec 25 Javascript
capacityFixed 基于jquery的类似于新浪微博新消息提示的定位框
May 24 Javascript
js操作iframe的一些方法介绍
Jun 25 Javascript
node.js中的fs.readdir方法使用说明
Dec 17 Javascript
Easyui 之 Treegrid 笔记
Apr 29 Javascript
jQuery弹出下拉列表插件(实现kindeditor的@功能)
Aug 16 Javascript
yarn与npm的命令行小结
Oct 20 Javascript
老生常谈原生JS执行环境与作用域
Nov 22 Javascript
js实现彩色条纹滚动条效果
Mar 15 Javascript
jquery实现点击弹出对话框
Feb 08 jQuery
Vue 技巧之控制父类的 slot
Feb 24 Javascript
nestjs中异常过滤器Exceptionfilter的具体使用
Feb 07 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实现时间轴函数代码
2011/10/08 PHP
windows平台中配置nginx+php环境
2015/12/06 PHP
javascript 程序库的比较(一)之DOM功能
2010/04/07 Javascript
jquery animate图片模向滑动示例代码
2011/01/26 Javascript
JavaScript 选中文字并响应获取的实现代码
2011/08/28 Javascript
JQueryEasyUI datagrid框架的进阶使用
2013/04/08 Javascript
jQuery UI 实现email输入提示实例
2013/08/15 Javascript
jquery实现select选中行、列合计示例
2014/04/25 Javascript
使用js dom和jquery分别实现简单增删改
2014/09/11 Javascript
javascript实现的登陆遮罩效果汇总
2015/11/09 Javascript
JavaScript使ifram跨域相互访问及与PHP通信的实例
2016/03/03 Javascript
ReactNative中使用Redux架构总结
2017/12/15 Javascript
vue使用element-ui的el-input监听不了回车事件的解决方法
2018/01/12 Javascript
JS二级菜单不同实现方法分析【4种方法】
2018/12/21 Javascript
[01:56]《DOTA2》中文配音CG
2013/04/22 DOTA
[00:15]天涯墨客终极技能展示
2018/08/25 DOTA
Jupyter notebook在mac:linux上的配置和远程访问的方法
2019/01/14 Python
python tkinter控件布局项目实例
2019/11/04 Python
Python解压 rar、zip、tar文件的方法
2019/11/19 Python
Flask框架搭建虚拟环境的步骤分析
2019/12/21 Python
Python输出指定字符串的方法
2020/02/06 Python
一些常用的HTML5模式(pattern) 总结
2015/07/14 HTML / CSS
波比布朗英国官网:Bobbi Brown英国
2017/11/13 全球购物
SOA面试题:如何在SOA中实现松耦合
2013/07/21 面试题
建筑工程毕业生自我鉴定
2014/01/14 职场文书
幼儿园托班开学寄语
2014/01/18 职场文书
关于晚自习早退的检讨书
2014/09/13 职场文书
大学生迟到检讨书500字
2014/10/17 职场文书
写给老婆的保证书
2015/02/27 职场文书
员工年度工作总结2015
2015/05/18 职场文书
2015年试用期工作总结范文
2015/05/28 职场文书
建党伟业电影观后感
2015/06/01 职场文书
2016年第29个世界无烟日宣传活动总结
2016/04/06 职场文书
攻击最高的10只幽灵系神奇宝贝,坚盾剑怪排第一,第五最为可怕
2022/03/18 日漫
「玫瑰之王的葬礼」舞台剧主视觉图公开
2022/03/21 日漫