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实现二分查找法实现代码
Nov 12 Javascript
JavaScript Event学习补遗 addEventSimple
Feb 11 Javascript
仿猪八戒网左下角的文字滚动效果
Oct 28 Javascript
读JavaScript DOM编程艺术笔记
Nov 15 Javascript
JS中prototype关键字的功能介绍及使用示例
Jul 21 Javascript
JS Loading功能的简单实现
Nov 29 Javascript
JavaScript中的Math.SQRT1_2属性使用简介
Jun 14 Javascript
介绍一个简单的JavaScript类框架
Jun 24 Javascript
js获取腾讯视频ID的方法
Oct 03 Javascript
React Native第三方平台分享的实例(Android,IOS双平台)
Aug 04 Javascript
vue组件发布到npm简单步骤
Nov 30 Javascript
vue中渲染对象中属性时显示未定义的解决
Jul 31 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 基本语法格式
2009/12/15 PHP
在win7中搭建Linux+PHP 开发环境
2014/10/08 PHP
Nginx下配置codeigniter框架方法
2015/04/07 PHP
PHP+MySQL实现的简单投票系统实例
2016/02/24 PHP
Yii2简单实现多语言配置的方法
2016/07/23 PHP
php 访问oracle 存储过程实例详解
2017/01/08 PHP
Yii中特殊行为ActionFilter的使用方法示例
2020/10/18 PHP
IE 条件注释详解总结(附实例代码)
2009/08/29 Javascript
基于Asp.net与Javascript控制的日期控件
2010/05/22 Javascript
jquery.post用法关于type设置问题补充
2014/01/03 Javascript
jquery xMarquee实现文字水平无缝滚动效果
2014/04/29 Javascript
javascript实现2048游戏示例
2014/05/04 Javascript
JavaScript数值数组排序示例分享
2014/05/27 Javascript
javascript动态判断html元素并执行不同的操作
2014/06/16 Javascript
Jquery 实现图片轮换
2015/01/28 Javascript
javascript创建函数的20种方式汇总
2015/06/23 Javascript
javascript 中事件冒泡和事件捕获机制的详解
2017/09/01 Javascript
JS中Attr的用法详解
2017/10/09 Javascript
jQuery序列化form表单数据为JSON对象的实现方法
2018/09/20 jQuery
python处理json数据中的中文
2014/03/06 Python
Python调用命令行进度条的方法
2015/05/05 Python
Python编程中NotImplementedError的使用方法
2018/04/21 Python
Python button选取本地图片并显示的实例
2019/06/13 Python
Python rabbitMQ如何实现生产消费者模式
2020/08/24 Python
利用python绘制中国地图(含省界、河流等)
2020/09/21 Python
Python系统公网私网流量监控实现流程
2020/11/23 Python
快速解决pymongo操作mongodb的时区问题
2020/12/05 Python
Html5 实现微信分享及自定义内容的流程
2019/08/20 HTML / CSS
《小熊住山洞》教学反思
2014/02/21 职场文书
机关单位人员学雷锋心得体会
2014/03/10 职场文书
五四青年节演讲稿
2014/05/26 职场文书
感谢信的技巧及范例
2019/05/15 职场文书
2019年冬至:天冷暖人心的问候祝福语大全
2019/12/20 职场文书
MySQL命令行操作时的编码问题详解
2021/04/14 MySQL
Python+uiautomator2实现自动刷抖音视频功能
2021/04/29 Python
react中的DOM操作实现
2021/06/30 Javascript