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 相关文章推荐
JQuery UI皮肤定制
Jul 27 Javascript
JavaScript DOM 学习第二章 编辑文本
Feb 19 Javascript
批量修改标签css样式以input标签为例
Jul 31 Javascript
JS获取各种宽度、高度的简单介绍
Dec 19 Javascript
jQuery使用zTree插件实现树形菜单和异步加载
Feb 25 Javascript
浅析函数声明和函数表达式——函数声明的声明提前
May 03 Javascript
javascript中获取元素标签中间的内容的实现方法
Oct 08 Javascript
js实现点击图片自动提交action的简单方法
Oct 16 Javascript
JS DOMReady事件的六种实现方法总结
Nov 23 Javascript
JavaScript实现单击网页任意位置打开新窗口与关闭窗口的方法
Sep 21 Javascript
通过vue-router懒加载解决首次加载时资源过多导致的速度缓慢问题
Apr 08 Javascript
Flexible.js可伸缩布局实现方法详解
Nov 13 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
使用 PHPStorm 开发 Laravel
2015/03/24 PHP
php读取csc文件并输出
2015/05/21 PHP
基于PHP实现假装商品限时抢购繁忙的效果
2015/10/16 PHP
微信网页授权(OAuth2.0) PHP 源码简单实现
2016/08/29 PHP
thinkphp制作404跳转页的简单实现方法
2016/09/22 PHP
新浪刚打开页面出来的全屏广告代码
2007/04/02 Javascript
javascript针对DOM的应用分析(四)
2012/04/15 Javascript
JS图片无缝滚动(简单利于使用)
2013/06/17 Javascript
javascript调试之DOM断点调试法使用技巧分享
2014/04/15 Javascript
jquery实现的V字形显示效果代码
2015/10/27 Javascript
基于jQuery实现的美观星级评论打分组件代码
2015/10/30 Javascript
Google 地图API Map()构造器详解
2016/08/06 Javascript
js实现小窗口拖拽效果
2016/12/03 Javascript
JavaScript运动框架 解决防抖动问题、悬浮对联(二)
2017/05/17 Javascript
使用vue制作探探滑动堆叠组件的实例代码
2018/03/07 Javascript
vue webpack开发访问后台接口全局配置的方法
2018/09/18 Javascript
vue+node实现图片上传及预览的示例方法
2018/11/22 Javascript
详解50行代码,Node爬虫练手项目
2019/04/22 Javascript
js纯前端实现腾讯cos文件上传功能的示例代码
2019/05/14 Javascript
vue-cli 3 全局过滤器的实例代码详解
2019/06/03 Javascript
vue实现侧边栏导航效果
2019/10/21 Javascript
浅谈vue异步数据影响页面渲染
2019/10/29 Javascript
[39:02]DOTA2亚洲邀请赛 3.31 小组赛 B组 Mineski vs VGJ.T
2018/04/01 DOTA
Python实现将数据库一键导出为Excel表格的实例
2016/12/30 Python
Python中字典的浅拷贝与深拷贝用法实例分析
2018/01/02 Python
python抓取网页中链接的静态图片
2018/01/29 Python
Python爬虫实现全国失信被执行人名单查询功能示例
2018/05/03 Python
python实现集中式的病毒扫描功能详解
2019/07/09 Python
Python3如何判断三角形的类型
2020/04/12 Python
莫斯科高科技在线商店:KremlinStore
2019/03/13 全球购物
党员个人思想汇报
2013/12/28 职场文书
无传销社区工作方案
2014/05/13 职场文书
交通事故协议书范文
2014/10/23 职场文书
校本培训个人总结
2015/02/28 职场文书
python 如何做一个识别率百分百的OCR
2021/05/29 Python
mysql的单列多值存储实例详解
2022/04/05 MySQL