JS获取农历日期具体实例


Posted in Javascript onNovember 14, 2013
<script type="text/javascript">
    var CalendarData = new Array(100);
    var madd = new Array(12);
    var tgString = "甲乙丙丁戊己庚辛壬癸";
    var dzString = "子丑寅卯辰巳午未申酉戌亥";
    var numString = "一二三四五六七八九十";
    var monString = "正二三四五六七八九十冬腊";
    var weekString = "日一二三四五六";
    var sx = "鼠牛虎兔龙蛇马羊猴鸡狗猪";
    var cYear, cMonth, cDay, TheDate;
    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);
    madd[0] = 0;
    madd[1] = 31;
    madd[2] = 59;
    madd[3] = 90;
    madd[4] = 120;
    madd[5] = 151;
    madd[6] = 181;
    madd[7] = 212;
    madd[8] = 243;
    madd[9] = 273;
    madd[10] = 304;
    madd[11] = 334;
    function GetBit(m, n) {
        return (m >> n) & 1;
    }
    function e2c() {
        TheDate = (arguments.length != 3) ? new Date() : new Date(arguments[0], arguments[1], arguments[2]);
        var total, m, n, k;
        var isEnd = false;
        var tmp = TheDate.getYear();
        if (tmp < 1900) {
            tmp += 1900;
        }
        total = (tmp - 1921) * 365 + Math.floor((tmp - 1921) / 4) + madd[TheDate.getMonth()] + TheDate.getDate() - 38;
        if (TheDate.getYear() % 4 == 0 && TheDate.getMonth() > 1) {
            total++;
        }
        for (m = 0; ; m++) {
            k = (CalendarData[m] < 0xfff) ? 11 : 12;
            for (n = k; n >= 0; n--) {
                if (total <= 29 + GetBit(CalendarData[m], n)) {
                    isEnd = true; break;
                }
                total = total - 29 - GetBit(CalendarData[m], n);
            }
            if (isEnd) break;
        }
        cYear = 1921 + m;
        cMonth = k - n + 1;
        cDay = total;
        if (k == 12) {
            if (cMonth == Math.floor(CalendarData[m] / 0x10000) + 1) {
                cMonth = 1 - cMonth;
            }
            if (cMonth > Math.floor(CalendarData[m] / 0x10000) + 1) {
                cMonth--;
            }
        }
    }
    function GetcDateString() {
        var tmp = "";
        tmp += tgString.charAt((cYear - 4) % 10);
        tmp += dzString.charAt((cYear - 4) % 12);
        tmp += "(";
        tmp += sx.charAt((cYear - 4) % 12);
        tmp += ")年 ";
        if (cMonth < 1) {
            tmp += "(闰)";
            tmp += monString.charAt(-cMonth - 1);
        } else {
            tmp += monString.charAt(cMonth - 1);
        }
        tmp += "月";
        tmp += (cDay < 11) ? "初" : ((cDay < 20) ? "十" : ((cDay < 30) ? "廿" : "三十"));
        if (cDay % 10 != 0 || cDay == 10) {
            tmp += numString.charAt((cDay - 1) % 10);
        }
        return tmp;
    }
    function GetLunarDay(solarYear, solarMonth, solarDay) {
        //solarYear = solarYear<1900?(1900+solarYear):solarYear;
        if (solarYear < 1921 || solarYear > 2020) {
            return "";
        } else {
            solarMonth = (parseInt(solarMonth) > 0) ? (solarMonth - 1) : 11;
            e2c(solarYear, solarMonth, solarDay);
            return GetcDateString();
        }
    }
    //调用
    var D = new Date();
    var yy = D.getFullYear();
    var mm = D.getMonth() + 1;
    var dd = D.getDate();
    var ww = D.getDay();
    var ss = parseInt(D.getTime() / 1000);
    if (yy < 100) yy = "19" + yy;
    function GetCNDate() {
        return GetLunarDay(yy, mm, dd);
    }
    $(document).ready(function () {
        var d = GetCNDate();
        alert(d);
    });
</script>
Javascript 相关文章推荐
javascript offsetX与layerX区别
Mar 12 Javascript
jquery的extend和fn.extend的使用说明
Jan 09 Javascript
使用js在页面中绘制表格核心代码
Sep 16 Javascript
js data日期初始化的5种方法
Dec 29 Javascript
浅析javascript中function 的 length 属性
May 27 Javascript
js实现遮罩层划出效果是生成div而不是显示
Jul 29 Javascript
浅谈javascript中createElement事件
Dec 05 Javascript
javascript实现tab切换的两个实例
Nov 05 Javascript
浅谈jquery fullpage 插件增加头部和版权的方法
Mar 20 jQuery
node.js自动上传ftp的脚本分享
Jun 16 Javascript
vue开发环境配置跨域的方法步骤
Jan 16 Javascript
Layui 带多选框表格监听事件以及按钮自动点击写法实例
Sep 02 Javascript
提高jQuery性能的十个诀窍
Nov 14 #Javascript
优化Jquery,提升网页加载速度
Nov 14 #Javascript
Jquery AJAX POST与GET之间的区别
Nov 14 #Javascript
Jquery中$.get(),$.post(),$.ajax(),$.getJSON()的用法总结
Nov 14 #Javascript
JS正则表达式大全(整理详细且实用)
Nov 14 #Javascript
JS中typeof与instanceof之间的区别总结
Nov 14 #Javascript
jQuery探测位置的提示弹窗(toolTip box)详细解析
Nov 14 #Javascript
You might like
超神学院:天使彦公认最美的三个视角,网友:我的天使快下凡吧!
2020/03/02 国漫
BBS(php &amp; mysql)完整版(六)
2006/10/09 PHP
php 连接mysql连接被重置的解决方法
2011/02/15 PHP
php生成excel列序号代码实例
2013/12/24 PHP
ThinkPHP使用心得分享-上传类UploadFile的使用
2014/05/15 PHP
PHP读取word文档的方法分析【基于COM组件】
2017/08/01 PHP
php测试kafka项目示例
2020/02/06 PHP
Laravel服务容器绑定的几种方法总结
2020/06/14 PHP
破解Session cookie的方法
2006/07/28 Javascript
js 小贴士一星期合集
2010/04/07 Javascript
HTML DOM的nodeType值介绍
2011/03/31 Javascript
纯Javascript实现Windows 8 Metro风格实现
2013/10/15 Javascript
自定义刻度jQuery进度条及插件
2015/09/02 Javascript
VUE利用vuex模拟实现新闻点赞功能实例
2017/06/28 Javascript
js获取css的各种样式并且设置他们的方法
2017/08/22 Javascript
基于BootStrap的文本编辑器组件Summernote
2017/10/27 Javascript
JavaScript进制转换实现方法解析
2020/01/18 Javascript
[05:31]DOTA2英雄梦之声_第04期_光之守卫
2014/06/23 DOTA
简单介绍Python中的RSS处理
2015/04/13 Python
Python采用Django制作简易的知乎日报API
2016/08/03 Python
利用Python自动监控网站并发送邮件告警的方法
2016/08/24 Python
python实现遍历文件夹修改文件后缀
2018/08/28 Python
Python3中exp()函数用法分析
2019/02/19 Python
Pycharm连接远程服务器并实现远程调试的实现
2019/08/02 Python
Python开发之基于模板匹配的信用卡数字识别功能
2020/01/13 Python
python自动点赞功能的实现思路
2020/02/26 Python
python opencv pytesseract 验证码识别的实现
2020/08/28 Python
canvas实现俄罗斯方块的方法示例
2018/12/13 HTML / CSS
班组长安全职责
2014/01/05 职场文书
婚庆公司的创业计划书
2014/01/22 职场文书
毕业生自荐书
2014/02/03 职场文书
农林环境专业求职信
2014/03/13 职场文书
企业安全生产月活动总结
2014/07/05 职场文书
语文课外活动总结
2014/08/27 职场文书
节能环保家庭事迹材料
2014/08/27 职场文书
高校群众路线教育实践活动剖析材料
2014/10/10 职场文书