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 相关文章推荐
js form 验证函数 当前比较流行的错误提示
Jun 23 Javascript
JavaScript 布尔操作符解析  &amp;&amp; || !
Aug 10 Javascript
js 火狐下取本地路径实现思路
Apr 02 Javascript
Jquery倒计时源码分享
May 16 Javascript
JS实现文字链接感应鼠标淡入淡出改变颜色的方法
Feb 26 Javascript
把普通对象转换成json格式的对象的简单实例
Jul 04 Javascript
vuejs在解析时出现闪烁的原因及防止闪烁的方法
Sep 19 Javascript
JS正则RegExp.test()使用注意事项(不具有重复性)
Dec 28 Javascript
JavaScript实现的贝塞尔曲线算法简单示例
Jan 30 Javascript
angularjs 动态从后台获取下拉框的值方法
Aug 13 Javascript
JavaScript之实现一个简单的Vue示例
Jan 17 Javascript
vue 中 命名视图的用法实例详解
Aug 14 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
php模板之Phpbean的目录结构
2008/01/10 PHP
php简单实现sql防注入的方法
2016/04/22 PHP
laravel 错误处理,接口错误返回json代码
2019/10/25 PHP
JQuery中each()的使用方法说明
2010/08/19 Javascript
如何让div span等元素能响应键盘事件操作指南
2012/11/13 Javascript
jquery实现带单选按钮的表格行选中时高亮显示
2013/08/01 Javascript
JS正则表达式获取分组内容的方法详解
2013/11/15 Javascript
setTimeout内不支持jquery的选择器的解决方案
2015/04/28 Javascript
浅谈Node.js中的定时器
2015/06/18 Javascript
jQuery简单实现仿京东商城的左侧菜单效果代码
2015/09/09 Javascript
js实现上传图片预览方法
2016/10/25 Javascript
ECMAscript 变量作用域总结概括
2017/08/18 Javascript
Vue cli3 库模式搭建组件库并发布到 npm的流程
2018/10/12 Javascript
微信小程序mpvue点击按钮获取button值的方法
2019/05/29 Javascript
JavaScript WeakMap使用详解
2021/02/05 Javascript
[02:30]联想杯DOTA2完美世界全国高校联赛—北京站现场
2015/11/16 DOTA
python文件的md5加密方法
2016/04/06 Python
python 3.5下xadmin的使用及修复源码bug
2017/05/10 Python
Python数据分析之双色球基于线性回归算法预测下期中奖结果示例
2018/02/08 Python
符合语言习惯的 Python 优雅编程技巧【推荐】
2018/09/25 Python
Python+Pyqt实现简单GUI电子时钟
2021/02/22 Python
PyTorch的SoftMax交叉熵损失和梯度用法
2020/01/15 Python
python3爬取torrent种子链接实例
2020/01/16 Python
python中使用you-get库批量在线下载bilibili视频的教程
2020/03/10 Python
详解Pandas 处理缺失值指令大全
2020/07/30 Python
详解python的super()的作用和原理
2020/10/29 Python
用python写PDF转换器的实现
2020/10/29 Python
python爬虫看看虎牙女主播中谁最“顶”步骤详解
2020/12/01 Python
python 操作excel表格的方法
2020/12/05 Python
三陽商会官方网站:Sanyo iStore
2019/05/15 全球购物
村官学习十八大感想
2014/01/15 职场文书
整改落实情况汇报材料
2014/10/29 职场文书
庐山导游词
2015/02/03 职场文书
教师节联欢会主持词
2015/07/04 职场文书
Python开发之QT解决无边框界面拖动卡屏问题(附带源码)
2021/05/27 Python
浅谈spring boot使用thymeleaf版本的问题
2021/08/04 Java/Android