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 Event学习第六章 事件的访问
Feb 07 Javascript
JS的反射问题
Apr 07 Javascript
JS拖动技术 关于setCapture使用
Dec 09 Javascript
js+canvas绘制五角星的方法
Jan 28 Javascript
在JavaScript中调用Java类和接口的方法
Sep 07 Javascript
微信小程序 swiper组件轮播图详解及实例
Nov 16 Javascript
jQuery源码分析之init的详细介绍
Feb 13 Javascript
Vue插件写、用详解(附demo)
Mar 20 Javascript
使用 vue.js 构建大型单页应用
Feb 10 Javascript
Vue slot用法(小结)
Oct 22 Javascript
Vue中对iframe实现keep alive无刷新的方法
Jul 23 Javascript
vue 实现把路由单独分离出来
Aug 13 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
Protoss建筑一览
2020/03/14 星际争霸
php自动加载的两种实现方法
2010/06/21 PHP
通过PHP修改Linux或Unix口令的方法分享
2012/01/30 PHP
Laravel框架中实现使用阿里云ACE缓存服务
2015/02/10 PHP
cssQuery()的下载与使用方法
2007/01/12 Javascript
js的with语句使用方法
2007/09/21 Javascript
Knockout数组(observable)使用详解示例
2013/11/15 Javascript
HTML页面登录时的JS验证方法
2014/05/28 Javascript
两种方法实现在HTML页面加载完毕后运行某个js
2014/06/16 Javascript
angular中使用路由和$location切换视图
2015/01/23 Javascript
javascript页面倒计时实例
2015/07/25 Javascript
移动端翻页插件dropload.js(支持Zepto和jQuery)
2016/07/27 Javascript
JavaScript易错知识点整理
2016/12/05 Javascript
EasyUI创建人员树的实例代码
2017/09/15 Javascript
10个经典的网页鼠标特效代码
2018/01/09 Javascript
React 使用recharts实现散点地图的示例代码
2018/12/07 Javascript
Vuex实现数据增加和删除功能
2019/11/11 Javascript
python使用paramiko模块实现ssh远程登陆上传文件并执行
2014/01/27 Python
python读取图片并修改格式与大小的方法
2018/07/24 Python
python3.6.3安装图文教程 TensorFlow安装配置方法
2020/06/24 Python
python: 自动安装缺失库文件的方法
2018/10/22 Python
详解python中@的用法
2019/03/27 Python
python pyinstaller 加载ui路径方法
2019/06/10 Python
Python3.5 win10环境下导入kera/tensorflow报错的解决方法
2019/12/19 Python
利用python3 的pygame模块实现塔防游戏
2019/12/30 Python
TensorFlow通过文件名/文件夹名获取标签,并加入队列的实现
2020/02/17 Python
Python sorted对list和dict排序
2020/06/09 Python
Python基于pyjnius库实现访问java类
2020/07/31 Python
open_basedir restriction in effect. 原因与解决方法
2021/03/14 PHP
HTML5 Canvas绘制文本及图片的基础教程
2016/03/14 HTML / CSS
使用canvas压缩图片上传的方法示例
2020/02/07 HTML / CSS
Allsole美国/加拿大:英国一家专门出售品牌鞋子的网站
2018/10/21 全球购物
Arti-shopping中文官网:大型海外商品一站式直邮平台
2020/03/23 全球购物
2016关于学习党章的心得体会
2016/01/15 职场文书
golang goroutine顺序输出方式
2021/04/29 Golang
maven依赖的version声明控制方式
2022/01/18 Java/Android