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 typeof 用法
Dec 28 Javascript
Javascript 文件夹选择框的两种解决方案
Jul 01 Javascript
javascript动态创建链接的方法
May 13 Javascript
jquery实现很酷的网页顶部图标下拉菜单效果
Aug 22 Javascript
jQuery采用连缀写法实现的折叠菜单效果
Sep 18 Javascript
JS制作适用于手机和电脑的通知信息效果
Oct 28 Javascript
javascript实现用户点击数量统计
Dec 25 Javascript
vue项目出现页面空白的解决方案
Oct 31 Javascript
vuex管理状态 刷新页面保持不被清空的解决方案
Nov 11 Javascript
js实现打字小游戏
Dec 17 Javascript
jQuery事件模型默认行为执行顺序及trigger()与 triggerHandler()比较实例分析
Apr 30 jQuery
React如何使用axios请求数据并把数据渲染到组件
Aug 05 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
网络资源
2006/10/09 PHP
php XMLWriter类的简单示例代码(RSS输出)
2011/09/30 PHP
浅析ThinkPHP中的pathinfo模式和URL重写
2014/01/06 PHP
php无限级评论嵌套实现代码
2018/04/18 PHP
初学JavaScript_03(ExtJs Grid的简单使用)
2008/10/02 Javascript
Jquery常用技巧收集整理篇
2010/11/14 Javascript
分享8款优秀的 jQuery 加载动画和进度条插件
2012/10/24 Javascript
JavaScript实现移动端页面按手机屏幕分辨率自动缩放的最强代码
2017/08/18 Javascript
react-router4 配合webpack require.ensure 实现异步加载的示例
2018/01/18 Javascript
小程序实现五星点评效果
2018/11/03 Javascript
vue 解决兄弟组件、跨组件深层次的通信操作
2020/07/27 Javascript
解决vue单页面应用进入页面加载所有 js 的问题
2020/08/12 Javascript
vue-video-player视频播放器使用配置详解
2020/10/23 Javascript
[55:03]LGD vs EG 2018国际邀请赛小组赛BO2 第二场 8.17
2018/08/18 DOTA
python数据库操作常用功能使用详解(创建表/插入数据/获取数据)
2013/12/06 Python
详解Django框架中的视图级缓存
2015/07/23 Python
python使用fork实现守护进程的方法
2017/11/16 Python
Python中xrange与yield的用法实例分析
2017/12/26 Python
详解python3中的真值测试
2018/08/13 Python
tensor和numpy的互相转换的实现示例
2019/08/02 Python
如何使用Python脚本实现文件拷贝
2019/11/20 Python
Python3如何对urllib和urllib2进行重构
2019/11/25 Python
TensorFLow 变量命名空间实例
2020/02/11 Python
Python面向对象程序设计之私有变量,私有方法原理与用法分析
2020/03/23 Python
Django model.py表单设置默认值允许为空的操作
2020/05/19 Python
css3中检验表单的required,focus,valid和invalid样式
2014/02/21 HTML / CSS
英国最出名高街品牌:Forever Unique
2018/02/24 全球购物
澳大利亚便宜隐形眼镜购买网站:QUICKLENS Australia
2018/10/06 全球购物
GE设备配件:GE Appliance Parts(家电零件、配件和滤水器)
2018/11/28 全球购物
管理心得体会
2013/12/28 职场文书
绩效工资分配方案
2014/01/18 职场文书
2014学雷锋活动心得体会
2014/03/10 职场文书
2014年审计工作总结
2014/11/17 职场文书
2014年村党支部工作总结
2014/12/04 职场文书
宾馆卫生管理制度
2015/08/06 职场文书
Vue接口封装的完整步骤记录
2021/05/14 Vue.js