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 相关文章推荐
IE6下JS动态设置图片src地址问题
Jan 08 Javascript
JavaScript Ajax编程 应用篇
Jul 02 Javascript
Vue.js学习笔记之 helloworld
Aug 14 Javascript
Jquery Easyui自定义下拉框组件使用详解(21)
Dec 31 Javascript
JS数组去重(4种方法)
Mar 27 Javascript
vue动态路由实现多级嵌套面包屑的思路与方法
Aug 16 Javascript
浅谈高大上的微信小程序中渲染html内容—技术分享
Oct 25 Javascript
微信小程序基于canvas渐变实现的彩虹效果示例
May 03 Javascript
详解基于Wepy开发小程序插件(推荐)
Aug 01 Javascript
在layui.use 中自定义 function 的正确方法
Sep 16 Javascript
Layui动态生成select下拉选择框不显示的解决方法
Sep 24 Javascript
JS检索下拉列表框中被选项目的索引号(selectedIndex)
Dec 17 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
使用网络地址转换实现多服务器负载均衡
2006/10/09 PHP
php error_log 函数的使用
2009/04/13 PHP
PHP捕获Fatal error错误的方法
2014/06/11 PHP
Composer设置忽略版本匹配的方法
2016/04/27 PHP
PHP Mysqli 常用代码集合
2016/11/12 PHP
mouse_on_title.js
2006/08/25 Javascript
JavaScript ( (__ = !$ + $)[+$] + ({} + $)[_/_] +({} + $)[_/_] )
2011/02/25 Javascript
jquery插件开发之实现md5插件
2014/03/17 Javascript
jquery.uploadify插件在chrome浏览器频繁崩溃解决方法
2015/03/01 Javascript
jQuery支持动态参数将函数绑定到事件上的方法
2015/03/17 Javascript
JS+html5制作简单音乐播放器
2020/09/13 Javascript
自带气泡提示的vue校验插件(vue-verify-pop)
2017/04/07 Javascript
详解AngularJs ui-router 路由的简单介绍
2017/04/26 Javascript
js实现放大镜特效
2017/05/18 Javascript
JS实现图片预览的两种方式
2017/06/27 Javascript
jquery拖动改变div大小
2017/07/04 jQuery
Node.js在图片模板上生成二维码图片并附带底部文字说明实现详解
2019/08/07 Javascript
D3.js 实现带伸缩时间轴拓扑图的示例代码
2020/01/20 Javascript
Node 模块原理与用法详解
2020/05/13 Javascript
[02:02]DOTA2英雄基础教程 斯拉达
2013/12/11 DOTA
使用Mixin设计模式进行Python编程的方法讲解
2016/06/21 Python
Python使用asyncio包处理并发详解
2017/09/09 Python
python自动裁剪图像代码分享
2017/11/25 Python
Python中文件的写入读取以及附加文字方法
2019/01/23 Python
PyQt 图解Qt Designer工具的使用方法
2019/08/06 Python
python3连接MySQL8.0的两种方式
2020/02/17 Python
使用Keras实现简单线性回归模型操作
2020/06/12 Python
HTML实现代码雨源码及效果示例
2020/02/25 HTML / CSS
Smashbox英国官网:美国知名彩妆品牌
2017/11/13 全球购物
Hotels.com泰国:酒店预订网站
2019/11/20 全球购物
音乐表演专业毕业生求职信
2013/10/14 职场文书
购房协议书范本
2014/04/11 职场文书
春游踏青活动方案
2014/08/14 职场文书
五好文明家庭事迹材料
2014/12/20 职场文书
Canvas绘制像素风图片的示例代码
2021/09/25 HTML / CSS
使用CSS实现六边形的图片效果
2022/08/05 HTML / CSS