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系列(9) 根本没有“JSON对象”这回事!
Jan 15 Javascript
js将json格式内容转换成对象的方法
Nov 01 Javascript
jQuery向后台传入json格式数据的方法
Feb 13 Javascript
javascript删除数组重复元素的方法汇总
Jun 24 Javascript
简单谈谈JS数组中的indexOf方法
Oct 13 Javascript
Node.js中Bootstrap-table的两种分页的实现方法
Sep 18 Javascript
vue二级路由设置方法
Feb 09 Javascript
JavaScript正则表达式函数总结(常用)
Feb 22 Javascript
关于jquery中attr()和prop()方法的区别
May 28 jQuery
详解vue2.0监听属性的使用心得及搭配计算属性的使用
Jul 18 Javascript
使用vue自定义指令开发表单验证插件validate.js
May 23 Javascript
react中Suspense的使用详解
Sep 01 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
比file_get_contents稳定的curl_get_contents分享
2012/01/11 PHP
setcookie中Cannot modify header information-headers already sent by错误的解决方法详解
2013/05/08 PHP
详解PHP执行定时任务的实现思路
2015/12/21 PHP
PHP 下载文件时如何自动添加bom头及解释BOM头和去掉bom头的方法
2016/01/04 PHP
js可突破windows弹退效果代码
2008/08/09 Javascript
javascript 写类方式之八
2009/07/05 Javascript
js DataSet数据源处理代码
2010/03/29 Javascript
js 限制input只能输入数字、字母和汉字等等
2013/12/18 Javascript
js和jquery使按钮失效为不可用状态的方法
2014/01/26 Javascript
confirm的用法示例用于按钮操作时确定是否执行
2014/06/19 Javascript
JavaScript判断变量是对象还是数组的方法
2014/08/28 Javascript
jQuery中 delegate使用的问题
2015/07/03 Javascript
javascript结合Flexbox简单实现滑动拼图游戏
2016/02/18 Javascript
基于jquery实现智能表单验证操作
2016/05/09 Javascript
微信小程序 SocketIO 实例讲解
2016/10/13 Javascript
全面介绍vue 全家桶和项目实例
2017/12/27 Javascript
原生JS实现的碰撞检测功能示例
2018/05/18 Javascript
vue仿淘宝滑动验证码功能(样式模仿)
2019/12/10 Javascript
使用Python脚本来获取Cisco设备信息的示例
2015/05/04 Python
Python Paramiko模块的安装与使用详解
2016/11/18 Python
python实现发送邮件功能
2017/07/22 Python
python实现上传下载文件功能
2020/11/19 Python
Windows下安装Django框架的方法简明教程
2018/03/28 Python
Python实战之制作天气查询软件
2019/05/14 Python
OpenCV 边缘检测
2019/07/10 Python
Django自定义全局403、404、500错误页面的示例代码
2020/03/08 Python
Python图像读写方法对比
2020/11/16 Python
使用django自带的user做外键的方法
2020/11/30 Python
opencv python 对指针仪表读数识别的两种方式
2021/01/14 Python
css3 伪类选择器快速复习小结
2019/09/10 HTML / CSS
strstr()的简单实现
2013/09/26 面试题
中学生运动会通讯稿大全
2014/09/18 职场文书
投标文件签署授权委托书范本
2014/10/12 职场文书
技术负责人岗位职责
2015/02/10 职场文书
竞聘开场白方式有哪些?
2019/08/28 职场文书