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 相关文章推荐
node.js中的buffer.slice方法使用说明
Dec 10 Javascript
最佳的JavaScript错误处理实践
Jul 16 Javascript
JS闭包用法实例分析
Mar 27 Javascript
微信小程序 页面跳转如何实现传值
Apr 05 Javascript
JS中IP地址与整数相互转换的实现代码
Apr 10 Javascript
详解微信小程序设置底部导航栏目方法
Jun 29 Javascript
angularjs实现猜大小功能
Oct 23 Javascript
图文介绍Vue父组件向子组件传值
Feb 17 Javascript
用Vue编写抽象组件的方法
May 06 Javascript
Angular 多级路由实现登录页面跳转(小白教程)
Nov 19 Javascript
vue配置多代理服务接口地址操作
Sep 08 Javascript
微信小程序自定义胶囊样式
Dec 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
邮箱正则表达式实现代码(针对php)
2013/06/21 PHP
php计算多维数组中所有值总和的方法
2015/06/24 PHP
thinkPHP5实现的查询数据库并返回json数据实例
2017/10/23 PHP
laravel框架的安装与路由实例分析
2019/10/11 PHP
PHP调用QQ互联接口实现QQ登录网站功能示例
2019/10/24 PHP
HTML-CSS群中单选引发的“事件”
2007/03/05 Javascript
使用JS取得焦点(focus)元素代码
2014/03/22 Javascript
js防止页面被iframe调用的方法
2014/10/30 Javascript
jQuery EasyUI datagrid实现本地分页的方法
2015/02/13 Javascript
浅谈js原生拖放
2016/11/21 Javascript
jQuery图片轮播实现并封装(一)
2016/12/03 Javascript
nodejs读写json文件的简单方法(必看)
2017/03/09 NodeJs
原生JS实现层叠轮播图
2017/05/17 Javascript
javascript 玩转Date对象(实例讲解)
2017/07/11 Javascript
JS实现根据数组对象的某一属性排序操作示例
2019/01/14 Javascript
jQuery选择器之基本选择器用法实例分析
2019/02/19 jQuery
Vue使用Canvas绘制图片、矩形、线条、文字,下载图片
2019/04/26 Javascript
3分钟了解vue数据劫持的原理实现
2019/05/01 Javascript
js核心基础之构造函数constructor用法实例分析
2019/05/11 Javascript
vue 2.5.1 源码学习 之Vue.extend 和 data的合并策略
2019/06/04 Javascript
vue项目中使用particles实现粒子背景效果及遇到的坑(按钮没有点击响应)
2020/02/11 Javascript
Python Sqlite3以字典形式返回查询结果的实现方法
2016/10/03 Python
Python中常用的内置方法
2019/01/28 Python
python实现批量注册网站用户的示例
2019/02/22 Python
Python八皇后问题解答过程详解
2019/07/29 Python
python中rb含义理解
2020/06/18 Python
详解Open Folder as PyCharm Project怎么添加的方法
2020/12/29 Python
CSS3区域模块region相关编写示例
2015/08/28 HTML / CSS
Linux开机引导的步骤是什么
2015/10/19 面试题
商场中秋节广播稿
2014/01/17 职场文书
党日活动总结
2014/05/07 职场文书
学习雷锋精神演讲稿
2014/05/10 职场文书
疾病捐款倡议书
2014/05/13 职场文书
2015年全国爱眼日活动小结
2015/02/27 职场文书
2016大学生形势与政策心得体会
2016/01/12 职场文书
Mysql中常用的join连接方式
2022/05/11 MySQL