带农历的JavaScript日期时间

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>带农历的JavaScript日期时间</title>
</head>
<body>
<SCRIPT language=JavaScript>
<!--
function CalConv()
 {
    FIRSTYEAR 
= 1998;
    LASTYEAR 
= 2031;
    today 
= new Date();
    SolarYear 
= today.getFullYear();
    SolarMonth 
= today.getMonth() + 1;
    SolarDate 
= today.getDate();
    Weekday 
= today.getDay();
    LunarCal 
= [
 
new tagLunarCal( 2753431001001101101 ),
 
new tagLunarCal( 4604481001001011101 ), /* 88 */
 
new tagLunarCal( 3505531100100101101 ), /* 89 */
 
new tagLunarCal( 2340591101010010101 ),
 
new tagLunarCal( 420141101010010101 ),
 
new tagLunarCal( 310291101101001010 ),
 
new tagLunarCal( 2123140101101010101 ), /* 93 */
 
new tagLunarCal( 3905200101011010101 ),
 
new tagLunarCal( 2876251010101011011 ),
 
new tagLunarCal( 4800300010010111011 ),
 
new tagLunarCal( 3701351001001011011 ), /* 97 */
 
new tagLunarCal( 2553411100100101011 ),
 
new tagLunarCal( 4404461010100101011 ),
 
new tagLunarCal( 3305511011010010101 ),
 
new tagLunarCal( 2246561011010101010 ), /* 101 */
 
new tagLunarCal( 400121011010101010 ),
 
new tagLunarCal( 309270101010110101 ),
 
new tagLunarCal( 4903120100101110101 ),
 
new tagLunarCal( 3804171010010110110 ), /* 105 */
 
new tagLunarCal( 2766230101001010111 ),
 
new tagLunarCal( 4600280101001010110 ),
 
new tagLunarCal( 3501330110100100110 ),
 
new tagLunarCal( 2442380111010010101 ), /* 109 */
 
new tagLunarCal( 4204440110101010101 ),
 
new tagLunarCal( 3105491010110101010 ),
 
new tagLunarCal( 2126540101010110101 ),
 
new tagLunarCal( 4000590100101101101 ), /* 113 */
 
new tagLunarCal( 286251010010101110 ),
 
new tagLunarCal( 4703101010010011101 ),
 
new tagLunarCal( 3604151101001001101 ),
 
new tagLunarCal( 2555201110100100110 ), /* 117 */
 
new tagLunarCal( 4300261101010100101 ),
 
new tagLunarCal( 3201311101101010100 ),
 
new tagLunarCal( 2232360110101101010 ) ];
 
/* 民国年月日 */
 SolarCal 
= [ 312831303130313130313031 ];
SolarDays 
= [ 03159901201511812122432733043343653960316091121152182213244274305335366397 ];    
    
    
if ( SolarYear <= FIRSTYEAR || SolarYear > LASTYEAR ) return 1;
    sm 
= SolarMonth - 1;
        
if ( sm < 0 || sm > 11 ) return 2;
        leap 
= GetLeap( SolarYear );
    
if ( sm == 1 )
        d 
= leap + 28;
    
else
        d 
= SolarCal[sm];
    
if ( SolarDate < 1 || SolarDate > d ) return 3;
    y 
= SolarYear - FIRSTYEAR;
    acc 
= SolarDays[ leap*14 + sm ] + SolarDate;
    kc 
= acc + LunarCal[y].BaseKanChih;
    Kan 
= kc % 10;
    Chih 
= kc % 12;
    
    Age 
= kc % 60;
    
if ( Age < 22 )
        Age 
= 22 - Age;
    
else
        Age 
= 82 - Age;
    
    
if ( acc <= LunarCal[y].BaseDays ) {
        y
--;
        LunarYear 
= SolarYear - 1;
        leap 
= GetLeap( LunarYear );
        sm 
+= 12;
        acc 
= SolarDays[leap*14 + sm] + SolarDate;
     }
    
else
        LunarYear 
= SolarYear;
            l1 
= LunarCal[y].BaseDays;
    
for ( i=0; i<13; i++ ) {
        l2 
= l1 + LunarCal[y].MonthDays[i] + 29;
        
if ( acc <= l2 ) break;
        l1 
= l2;
     }
    LunarMonth 
= i + 1;
    LunarDate 
= acc - l1;
    im 
= LunarCal[y].Intercalation;
    
if ( im != 0 && LunarMonth > im ) {
        LunarMonth
--;
        
if ( LunarMonth == im ) LunarMonth = -im;
     }
    
if ( LunarMonth > 12 ) LunarMonth -= 12;
 today
=new Date();
 
function initArray(){
 
this.length=initArray.arguments.length
 
for(var i=0;i<this.length;i++)
 
this[i+1]=initArray.arguments[i] }
 
var d=new initArray("星期日","星期一","星期二","星期三","星期四","星期五","星期六");
 document.write(
"", today.getYear(),"",today.getMonth()+1,"",today.getDate(),"日&nbsp;",d[today.getDay()+1],"");
  months 
= ["","","","","","","","","","","十一","十二"];
  days 
= ["初一","初二","初三","初四","初五","初六","初七","初八","初九","初十","十一","十二","十三","十四","十五","十六","十七","十八","十九","二十","廿一","廿二","廿三","廿四","廿五","廿六","廿七","廿八","廿九","三十"];
 document.write( 
"&nbsp;农历"+months[LunarMonth-1]+"" + days[LunarDate-1+ "");
 
return 0
}
 
/* 是否有闰年, 0 平年, 1 闰年 */
function GetLeap( year )
 {
 
if ( year % 400 == 0 )
 
return 1;
 
else if ( year % 100 == 0 )
 
return 0;
 
else if ( year % 4 == 0 )
 
return 1;
 
else
 
return 0;
 }
function tagLunarCal( d, i, w, k, m1, m2, m3, m4, m5, m6, m7, m8, m9, m10, m11, m12, m13) {
 
this.BaseDays = d; 
 
this.Intercalation = i; /* 0代表此年沒有闰月 */
 
this.BaseWeekday = w; /* 民国1月1日星期減 1 */
 
this.BaseKanChih = k; /* 民国1月1日干支序号减 1 */
 
this.MonthDays = [ m1, m2, m3, m4, m5, m6, m7, m8, m9, m10, m11, m12, m13 ]; /* 此農曆年每月之大小, 0==小月(29日), 1==大月(30日) */
}
//-->
</SCRIPT>
<target=_blank href=/><FONT color=#0066cc><SCRIPT>CalConv();</SCRIPT></FONT></a>
</body>
</html>
原文地址:https://www.cnblogs.com/icejd/p/1916562.html