`

公历转换阴历

 
阅读更多
var DateConversion = (function() {  
    var constants = {  
        LUNARINFO : new Array(  
                /* 1900 */  
                0x04bd8, 0x04ae0, 0x0a570, 0x054d5, 0x0d260, 0x0d950, 0x16554,  
                0x056a0, 0x09ad0, 0x055d2, 0x04ae0, 0x0a5b6, 0x0a4d0, 0x0d250,  
                0x1d255, 0x0b540, 0x0d6a0, 0x0ada2, 0x095b0, 0x14977, 0x04970,  
                0x0a4b0, 0x0b4b5, 0x06a50, 0x06d40, 0x1ab54, 0x02b60, 0x09570,  
                0x052f2, 0x04970, 0x06566, 0x0d4a0, 0x0ea50, 0x06e95, 0x05ad0,  
                0x02b60, 0x186e3, 0x092e0, 0x1c8d7, 0x0c950, 0x0d4a0, 0x1d8a6,  
                0x0b550, 0x056a0, 0x1a5b4, 0x025d0, 0x092d0, 0x0d2b2, 0x0a950,  
                0x0b557, 0x06ca0, 0x0b550, 0x15355, 0x04da0, 0x0a5d0, 0x14573,  
                0x052d0, 0x0a9a8, 0x0e950, 0x06aa0, 0x0aea6, 0x0ab50, 0x04b60,  
                0x0aae4, 0x0a570, 0x05260, 0x0f263, 0x0d950, 0x05b57, 0x056a0,  
                0x096d0, 0x04dd5, 0x04ad0, 0x0a4d0, 0x0d4d4, 0x0d250, 0x0d558,  
                0x0b540, 0x0b5a0, 0x195a6, 0x095b0, 0x049b0, 0x0a974, 0x0a4b0,  
                0x0b27a, 0x06a50, 0x06d40, 0x0af46, 0x0ab60, 0x09570, 0x04af5,  
                0x04970, 0x064b0, 0x074a3, 0x0ea50, 0x06b58, 0x055c0, 0x0ab60,  
                0x096d5, 0x092e0, 0x0c960, 0x0d954, 0x0d4a0, 0x0da50, 0x07552,  
                0x056a0, 0x0abb7, 0x025d0, 0x092d0, 0x0cab5, 0x0a950, 0x0b4a0,  
                0x0baa4, 0x0ad50, 0x055d9, 0x04ba0, 0x0a5b0, 0x15176, 0x052b0,  
                0x0a930, 0x07954, 0x06aa0, 0x0ad50, 0x05b52, 0x04b60, 0x0a6e6,  
                0x0a4e0, 0x0d260, 0x0ea65, 0x0d530, 0x05aa0, 0x076a3, 0x096d0,  
                0x04bd7, 0x04ad0, 0x0a4d0, 0x1d0b6, 0x0d250, 0x0d520, 0x0dd45,  
                0x0b5a0, 0x056d0, 0x055b2, 0x049b0, 0x0a577, 0x0a4b0, 0x0aa50,  
                0x1b255, 0x06d20, 0x0ada0,/* 2049 */  
                // 下面的是从 2050 到 2100 年的  
                0x14b63, /* 2050 */  
                0x09370, 0x049f8, 0x04970, 0x064b0, 0x168a6, /* 2055 */  
                0x0ea50, 0x06b20, 0x1a6c4, 0x0aae0, 0x0a2e0, /* 2060 */  
                0x0d2e3, 0x0c960, 0x0d557, 0x0d4a0, 0x0da50, /* 2065 */  
                0x05d55, 0x056a0, 0x0a6d0, 0x055d4, 0x052d0, /* 2070 */  
                0x0a9b8, 0x0a950, 0x0a4a0, 0x0b6a6, 0x0ad50, /* 2075 */  
                0x055a0, 0x0aba0, 0x0a5b0, 0x052b0, 0x0b273, /* 2080 */  
                0x06930, 0x07337, 0x06aa0, 0x0ad50, 0x14b55, /* 2085 */  
                0x04b60, 0x0a570, 0x054e4, 0x0d260, 0x0e968, /* 2090 */  
                0x0d520, 0x0daa0, 0x16aa6, 0x056d0, 0x04ae0, /* 2095 */  
                0x0a9d4, 0x0a4d0, 0x0d150, 0x0f252, 0x0d520 /* 2100 */),  
        GAN : new Array("甲", "乙", "丙", "丁", "戊", "己", "庚", "辛", "壬", "癸"),  
        ZHI : new Array("子", "丑", "寅", "卯", "辰", "巳", "午", "未", "申", "酉", "戌",  
                "亥")  
    };  
    var cd = function(strDate) {  
        var date, year, month, day, displayDay, displayMonth,result;  
        this.setDate = function(strDate) {  
            if (strDate) {  
                date = this.strToDate(strDate);  
            } else {  
                date = new Date();  
            }  
        };  
        this.getDate = function() {  
            return  date;   
        };  
        this.getResult = function(){  
            return result;  
        };  
        this.setDate(strDate);  
        var res =lunar(new Date(date.getFullYear(), date.getMonth()-1,date.getDate()));  
        var cl = '<font color="red" STYLE="font-size:9pt;">';  
        var tt = cyclical(res[0] - 1900 + 36) +'('+res[0] + ')年'+(res[1] ==true? '闰' : '')
                + cDay(res[2], res[3]);  
         result =cl + tt + '</font>';  
    };  
    cd.getConstant = function(name) {  
        return constants[name];  
    };  
    // ==== 传入 offset 传回干支, 0=甲子  
    function cyclical(num) {  
        return (DateConversion.getConstant('GAN')[num % 10] + DateConversion  
                .getConstant('ZHI')[num % 12]);  
    };  
    // ==== 传回农历 y年的总天数  
    function lYearDays(y) {  
        var i, sum = 348;  
        for (i = 0x8000; i > 0x8; i >>= 1)  
            sum += (DateConversion.getConstant('LUNARINFO')[y - 1900] & i)  
                    ? 1  
                    : 0;  
        return (sum + leapDays(y));  
    };  
    // ==== 传回农历 y年闰月的天数  
    function leapDays(y) {  
        if (leapMonth(y))  
            return ((DateConversion.getConstant('LUNARINFO')[y - 1900] & 0x10000)  
                    ? 30  
                    : 29);  
        else  
            return (0);  
    };  
    // ==== 传回农历 y年闰哪个月 1-12 , 没闰传回 0  
    function leapMonth(y) {  
        return (DateConversion.getConstant('LUNARINFO')[y - 1900] & 0xf);  
    };  
    // ====================================== 传回农历 y年m月的总天数  
    function monthDays(y, m) {  
        return (DateConversion.getConstant('LUNARINFO')[y - 1900] & (0x10000 >> m))  
                ? 30  
                : 29;  
    };  
    // ==== 中文日期  
    function cDay(m, d) {  
        var nStr1 = new Array('日', '一', '二', '三', '四', '五', '六', '七', '八', '九',  
                '十');  
        var nStr2 = new Array('初', '十', '廿', '卅', ' ');  
        var s;  
        if (m > 10) {  
            s = '十' + nStr1[m - 10];  
        } else {  
            s = nStr1[m];  
        }  
        s += '月';  
        switch (d) {  
            case 10 :  
                s += '初十';  
                break;  
            case 20 :  
                s += '二十';  
                break;  
            case 30 :  
                s += '三十';  
                break;  
            default :  
                s += nStr2[Math.floor(d / 10)];  
                s += nStr1[d % 10];  
        }  
        return (s);  
    };  
    // ==== 算出农历, 传入日期物件, 传回农历日期物件  
    // ==== 该物件属性有 .year .month .day .isLeap .yearCyl .dayCyl .monCyl  
    function lunar(objDate) {  
        var i, leap = 0, temp = 0;  
        var baseDate = new Date(1900, 0, 31);  
        var offset = (objDate - baseDate) / 86400000;  
  
        // this.dayCyl = offset + 40;  
        var monCyl = 14;  
  
        for (i = 1900; i < 2050 && offset > 0; i++) {  
            temp = lYearDays(i);  
            offset -= temp;  
            monCyl += 12;  
        }  
        if (offset < 0) {  
            offset += temp;  
            i--;  
            monCyl -= 12;  
        }  
  
        var year = i;  
        // this.yearCyl = i - 1864;  
  
        leap = leapMonth(i); // 闰哪个月  
        var isLeap = false;  
  
        for (i = 1; i < 13 && offset > 0; i++) {  
            // 闰月  
            if (leap > 0 && i == (leap + 1) && isLeap == false) {  
                --i;  
                isLeap = true;  
                temp = leapDays(year);  
            } else {  
                temp = monthDays(year, i);  
            }  
  
            // 解除闰月  
            if (isLeap == true && i == (leap + 1)) {  
                isLeap = false;  
            }  
  
            offset -= temp;  
            if (isLeap == false) {  
                monCyl++;  
            }  
        }  
  
        if (offset == 0 && leap > 0 && i == leap + 1) {  
            if (isLeap) {  
                isLeap = false;  
            } else {  
                isLeap = true;  
                --i;  
                --monCyl;  
            }  
        }  
  
        if (offset < 0) {  
            offset += temp;  
            --i;  
            --monCyl;  
        }  
		//年(闰)月日
        return [year,isLeap,i,offset + 1];  
    }  
    return cd;  
})();  
  
DateConversion.prototype = {  
    strToDate : function(str) {  
        var arys = new Array();  
        arys = str.split('-');  
        var newDate = new Date(arys[0], arys[1], arys[2]);  
        return newDate;  
    }  
};  

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <title>农历日期显示</title>
    <meta http-equiv="content-type" content="text/html; charset=gbk">
<script type="text/javascript" src='dateConversion.js' ></script>
<script>
// 显示当前时间
function setCalendar() {
	var obj =  new DateConversion(document.getElementById('sdc').value);
	document.getElementById('dc').innerHTML=obj.getResult();
}
</script>
<!--结束-->
  </head>
  <body>
	<div id='dc'></div>
    <input type='text' id='sdc' value='1988-02-02'></input>
	<input type='button' onclick='setCalendar()' value='Date Conversion'/>
  </body>
</html>
分享到:
评论

相关推荐

    公历转换农历的算法(JavaScript)

    公历转换农历的算法(JavaScript) 公历转换农历的算法是指将公历日期转换为农历日期的过程。公历是国际通用的日期系统,而农历则是中国传统的日期系统。农历的日期系统与公历不同,它的日期是根据月亮的周期变化而...

    VB写的阳历转换阴历的类模块

    VB写的阳历转换阴历的类模块 一定能用

    VC++ 阳历与农历转换程序,也就是公历与阴历的相互转换,部分代码是从网上找到的,重新修正了一大部分代码,大家也可以把它当作控件来使用,因为我不初就是想想这样一个程序,奉献给大家。

    本项目涉及的是一个使用VC++实现的阳历与农历转换程序,它能够进行公历(阳历)和阴历(农历)之间的相互转换。这种功能在处理中国传统节日或者需要考虑农历的日程管理软件中非常实用。 首先,我们要理解阳历和农历...

    VB写的阳历转换阴历的程序

    标题 "VB写的阳历转换阴历的程序" 描述了这是一个使用Visual Basic (VB) 开发的程序,其主要功能是将公历日期(阳历)转换为农历日期(阴历)。在编程领域,这样的程序涉及到日期和时间的处理,以及特定文化(如中国...

    公历转换农历new

    这个名为"公历转换农历new"的项目显然聚焦于将公历日期转换为农历日期的功能。公历,也称为格里高利历,是国际上广泛使用的日历系统,而农历则在中国、越南、韩国等东亚国家和地区普遍使用,尤其在传统节日和文化...

    java 阳历转换农历

    ### Java实现阳历转换农历工具类 在Java编程语言中,实现阳历(公历)与农历之间的转换是一项实用的功能,特别是在需要根据农历日期进行计算或处理特定中国文化节日的应用场景中。下面将详细介绍如何通过一个Java类...

    java(阳历转换为农历).pdf

    java阳历转换为农历是指将公历日期转换为农历日期的过程。Java是一种广泛使用的编程语言,通过使用Java语言,可以实现阳历日期到农历日期的转换。 知识点一:Java中的日期类 在Java中,日期类是java.util包下的一...

    公历农历(阳历阴历)对照表(1900年-2100年)

    公历农历(阳历阴历)对照表(1900年-2100年),客户生日提醒,各种根据身份证转换阴历生日之类的业务场景必备神器。公历农历(阳历阴历)对照表(1900年-2100年),客户生日提醒,各种根据身份证转换阴历生日之类的业务场景...

    java类:阳历转换阴历

    将阳历转换阴历: 2010年2月24日 星期三 15:10 庚寅年(虎)正月十一申时

    阳历and阴历转换.rar_MATLAB 阴历_MATLAB 阴历阳历_阴历阳历

    在提供的“阳历and阴历转换.rar”压缩包中,包含了一个利用MATLAB实现的阴历与阳历转换工具。这个工具对于那些需要处理与日期相关的程序,特别是在中国或其他使用农历的国家和地区,是非常有用的。 首先,我们要...

    支持各种编程语言公历(阳历) 农历(阴历)转换

    公历(阳历) 农历(阴历)转换,支持时间段从 1900-2100 如果需要更长的时间段,利用 generate.htm 生成的数据即可。 支持各种编程语言 C#,java,Objective-C,php,Python,javascript(nodejs),C/C++,ruby,swift,golang 等...

    MATLAB实现阳历、阴历与干支历的日期转换

    2. **阴历到阳历转换**:根据阴历的月和日,结合阴历的年份,计算对应的阳历日期。这涉及到对阴历月份的天数表的查找,以及闰月的处理。 3. **阳历到阴历转换**:通过阳历的年、月、日,反推出阴历的年、月、日。这...

    用51单片机实现公历与农历转换C

    在本文中,我们将深入探讨如何使用51单片机通过C语言实现公历与农历的转换。51单片机是微控制器领域中常见的8位处理器,广泛应用于各种嵌入式系统设计。C语言作为其常用的编程语言,具有高效、灵活和可移植性强的...

    阳历转换农历 .Net

    在.NET开发环境中,阳历与农历的转换是一个常见的需求,特别是在处理中国传统节日或者进行日历相关的功能时。本文将深入探讨如何使用C#等.NET语言实现阳历到农历的转换,并展示如何显示天干地支。 首先,我们需要...

    MySQL阳历转农历SQL实现

    MySQL阳历转农历SQL实现 在mysql上通过SQL语言实现的阳历转农历, 年份跨越从1900到2049年.

    阳历转换农历,有详细注释

    "阳历转换农历,有详细注释"这个项目显然是一个用51汇编语言编写的程序,它的主要目标就是实现公历日期到农历日期的转换。51系列单片机是Intel 8051微控制器的衍生物,因其高效、低成本和广泛应用而在嵌入式系统中...

    vb公历农历转换.rar

    在VB(Visual Basic)编程环境中,公历与农历的转换是一项常见的需求,特别是在开发涉及到日期处理的项目时,如日历应用、传统节日提醒等。这个"vb公历农历转换.rar"压缩包文件可能包含了一个VB项目,用于实现这两种...

    PHP实现公历和农历之间的转换

    PHP实现公历和农历之间的转换 一、开发环境 1、环境搭建:Windows 8+Apache 2.4.18+MySQL 5.7.11+PHP 7.1.0 。 2、文本编辑器:Sublime Text3。 二、主要技术 本实验主要使用JS类库和公历转农历的类库实现。

    Qt/C++实现阳历转农历功能

    一种流行的选择是开源的“Chinese Calendar Algorithm”(中历算法),它可以准确地计算出公历和农历之间的转换。 以下是一个简单的步骤概述: 1. **导入必要的库**:首先,你需要导入Qt的GUI库,如`QtWidgets`,...

Global site tag (gtag.js) - Google Analytics