农历算法-JavaScript

作者: 来源: 日期:2009-10-13

农历英译

  • the lunar(['lju:nə] 月亮的) calendar
  • the traditional Chinese calendar

<html>
 
<head>
 
</head>
 
<body>
 
<script type="text/javascript">
<!--
var CalendarData=new Array(20);
var madd=new Array(12);
var TheDate=new Date();
var tgString="甲乙丙丁戊己庚辛壬癸";
var dzString="子丑寅卯辰巳午未申酉戌亥";
var numString="一二三四五六七八九十";
var monString="正二三四五六七八九十冬腊";
var weekString="日一二三四五六";
var sx="鼠牛虎兔龙蛇马羊猴鸡狗猪";
var cYear;
var cMonth;
var cDay;
var cHour;
var cDateString;
var DateString;
var Browser=navigator.appName;
 
 
function init() {
    CalendarData[0] = 0x41A95;
    CalendarData[1] = 0xD4A;
    CalendarData[2] = 0xDA5;
    CalendarData[3] = 0x20B55;
    CalendarData[4] = 0x56A;
    CalendarData[5] = 0x7155B;
    CalendarData[6] = 0x25D;
    CalendarData[7] = 0x92D;
    CalendarData[8] = 0x5192B;
    CalendarData[9] = 0xA95;
    CalendarData[10] = 0xB4A;
    CalendarData[11] = 0x416AA;
    CalendarData[12] = 0xAD5;
    CalendarData[13] = 0x90AB5;
    CalendarData[14] = 0x4BA;
    CalendarData[15] = 0xA5B;
    CalendarData[16] = 0x60A57;
    CalendarData[17] = 0x52B;
    CalendarData[18] = 0xA93;
    CalendarData[19] = 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() {
    var total, m, n, k;
    var isEnd = false;
    var tmp = TheDate.getYear();
    if (tmp < 1900) tmp += 1900;
    total = (tmp - 2001) * 365
+ Math.floor((tmp - 2001) / 4)
+ madd[TheDate.getMonth()]
+ TheDate.getDate()
- 23;
    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 = 2001 + 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--;
    }
    cHour = Math.floor((TheDate.getHours() + 3) / 2);
}
 
 
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);
    if (cHour == 13) tmp += "夜";
    tmp += dzString.charAt((cHour - 1) % 12);
    tmp += "时";
    cDateString = tmp;
    return tmp;
}
 
 
function GetDateString() {
    var tmp = "";
    var t1 = TheDate.getYear();
    if (t1 < 1900) t1 += 1900;
    tmp += t1
+ "-"
+ (TheDate.getMonth() + 1) + "-"
+ TheDate.getDate() + " "
+ TheDate.getHours() + ":"
+ ((TheDate.getMinutes() < 10) ? "0" : "")
+ TheDate.getMinutes()
+ " 星期" + weekString.charAt(TheDate.getDay());
    DateString = tmp;
    return tmp;
}
 
 
init();
e2c();
GetDateString();
GetcDateString();
document.write(DateString,"<br>",cDateString);
//-->
</script>
 
</body>
 
</html>
相关文章