JAVASCRIPT显示农历的日历

JAVASCRIPT显示农历的日历 显示效果: 
2007年2月28日 星期三 农历丁亥年 正月十一

<SCRIPT language=JavaScript > 
function RunGLNL(){ 
var today=new Date(); 
var d=new Array("星期日","星期一","星期二","星期三","星期四","星期五","星期六"); 
var DDDD=(today.getYear()<100 ? today.getYear()+1900:today.getYear())+""+(today.getMonth()+1)+""+today.getDate()+""
DDDD 
= DDDD + " " + d[today.getDay()]; 
DDDD 
= DDDD+ " " + (CnDateofDateStr(today)); 
//DDDD = DDDD+ " " + SolarTerm(today); 
document.write(DDDD); 

function DaysNumberofDate(DateGL){ 
return parseInt((Date.parse(DateGL)-Date.parse(DateGL.getYear()+"/1/1"))/86400000)+1; 

function CnDateofDate(DateGL){ 
var CnData=new Array( 
0x16,0x2a,0xda,0x00,0x83,0x49,0xb6,0x05,0x0e,0x64,0xbb,0x00,0x19,0xb2,0x5b,0x00
0x87,0x6a,0x57,0x04,0x12,0x75,0x2b,0x00,0x1d,0xb6,0x95,0x00,0x8a,0xad,0x55,0x02
0x15,0x55,0xaa,0x00,0x82,0x55,0x6c,0x07,0x0d,0xc9,0x76,0x00,0x17,0x64,0xb7,0x00
0x86,0xe4,0xae,0x05,0x11,0xea,0x56,0x00,0x1b,0x6d,0x2a,0x00,0x88,0x5a,0xaa,0x04
0x14,0xad,0x55,0x00,0x81,0xaa,0xd5,0x09,0x0b,0x52,0xea,0x00,0x16,0xa9,0x6d,0x00
0x84,0xa9,0x5d,0x06,0x0f,0xd4,0xae,0x00,0x1a,0xea,0x4d,0x00,0x87,0xba,0x55,0x04 
); 
var CnMonth=new Array(); 
var CnMonthDays=new Array(); 
var CnBeginDay; 
var LeapMonth; 
var Bytes=new Array(); 
var I; 
var CnMonthData; 
var DaysCount; 
var CnDaysCount; 
var ResultMonth; 
var ResultDay; 
var yyyy=DateGL.getYear(); 
var mm=DateGL.getMonth()+1
var dd=DateGL.getDate(); 
if(yyyy<100) yyyy+=1900
  
if ((yyyy < 1997|| (yyyy > 2020)){ 
    
return 0
    } 
  Bytes[
0= CnData[(yyyy - 1997* 4]; 
  Bytes[
1= CnData[(yyyy - 1997* 4 + 1]; 
  Bytes[
2= CnData[(yyyy - 1997* 4 + 2]; 
  Bytes[
3= CnData[(yyyy - 1997* 4 + 3]; 
  
if ((Bytes[0& 0x80!= 0) {CnMonth[0= 12;} 
  
else {CnMonth[0= 11;} 
  CnBeginDay 
= (Bytes[0& 0x7f); 
  CnMonthData 
= Bytes[1]; 
  CnMonthData 
= CnMonthData << 8
  CnMonthData 
= CnMonthData | Bytes[2]; 
  LeapMonth 
= Bytes[3]; 
for (I=15;I>=0;I--){ 
    CnMonthDays[
15 - I] = 29
    
if (((1 << I) & CnMonthData) != 0 ){ 
      CnMonthDays[
15 - I]++;} 
    
if (CnMonth[15 - I] == LeapMonth ){ 
      CnMonth[
15 - I + 1= - LeapMonth;} 
    
else
      
if (CnMonth[15 - I] < 0 ){CnMonth[15 - I + 1= - CnMonth[15 - I] + 1;} 
      
else {CnMonth[15 - I + 1= CnMonth[15 - I] + 1;} 
      
if (CnMonth[15 - I + 1> 12 ){ CnMonth[15 - I + 1= 1;} 
    } 
  } 
  DaysCount 
= DaysNumberofDate(DateGL) - 1
  
if (DaysCount <= (CnMonthDays[0- CnBeginDay)){ 
    
if ((yyyy > 1901&& (CnDateofDate(new Date((yyyy - 1)+"/12/31")) < 0)){ 
      ResultMonth 
= - CnMonth[0];} 
    
else {ResultMonth = CnMonth[0];} 
    ResultDay 
= CnBeginDay + DaysCount; 
  } 
  
else
    CnDaysCount 
= CnMonthDays[0- CnBeginDay; 
    I 
= 1
    
while ((CnDaysCount < DaysCount) && (CnDaysCount + CnMonthDays[I] < DaysCount)){ 
      CnDaysCount
+= CnMonthDays[I]; 
      I
++
    } 
    ResultMonth 
= CnMonth[I]; 
    ResultDay 
= DaysCount - CnDaysCount; 
  } 
  
if (ResultMonth > 0){ 
    
return ResultMonth * 100 + ResultDay;} 
  
else{return ResultMonth * 100 - ResultDay;} 

function CnYearofDate(DateGL){ 
var YYYY=DateGL.getYear(); 
var MM=DateGL.getMonth()+1
var CnMM=parseInt(Math.abs(CnDateofDate(DateGL))/100); 
if(YYYY<100) YYYY+=1900
if(CnMM>MM) YYYY--
YYYY
-=1864
return CnEra(YYYY)+""

function CnMonthofDate(DateGL){ 
var  CnMonthStr=new Array("","","","","","","","","","","","",""); 
var  Month; 
  Month 
= parseInt(CnDateofDate(DateGL)/100); 
  if (Month < 0){return "" + CnMonthStr[-Month] + "";} 
  
else{return CnMonthStr[Month] + "";} 

function CnDayofDate(DateGL){ 
var CnDayStr=new Array(""
    
"初一""初二""初三""初四""初五"
    
"初六""初七""初八""初九""初十"
    
"十一""十二""十三""十四""十五"
    
"十六""十七""十八""十九""二十"
    
"廿一""廿二""廿三""廿四""廿五"
    
"廿六""廿七""廿八""廿九""三十"); 
var Day; 
  Day 
= (Math.abs(CnDateofDate(DateGL)))%100
  
return CnDayStr[Day]; 

function DaysNumberofMonth(DateGL){ 
var MM1=DateGL.getYear(); 
    MM1
<100 ? MM1+=1900:MM1; 
var MM2=MM1; 
    MM1
+="/"+(DateGL.getMonth()+1); 
    MM2
+="/"+(DateGL.getMonth()+2); 
    MM1
+="/1"
    MM2
+="/1"
return parseInt((Date.parse(MM2)-Date.parse(MM1))/86400000); 

function CnEra(YYYY){ 
var Tiangan=new Array("","","","","","","","","",""); 
//var Dizhi=new Array("子(鼠)","丑(牛)","寅(虎)","卯(兔)","辰(龙)","巳(蛇)", 
                    //"午(马)","未(羊)","申(猴)","酉(鸡)","戌(狗)","亥(猪)"); 
var Dizhi=new Array("","","","","","","","","","","",""); 
return Tiangan[YYYY%10]+Dizhi[YYYY%12]; 

function CnDateofDateStr(DateGL){ 
  
if(CnMonthofDate(DateGL)=="零月"return " 请调整您的计算机日期!"
  
else return "农历"+CnYearofDate(DateGL)+ " " + CnMonthofDate(DateGL) + CnDayofDate(DateGL); 

function SolarTerm(DateGL){ 
  
var SolarTermStr=new Array( 
        
"小寒","大寒","立春","雨水","惊蛰","春分"
        
"清明","谷雨","立夏","小满","芒种","夏至"
        
"小暑","大暑","立秋","处暑","白露","秋分"
        
"寒露","霜降","立冬","小雪","大雪","冬至"); 
  
var DifferenceInMonth=new Array( 
        
1272060,1275495,1281180,1289445,1299225,1310355
        
1321560,1333035,1342770,1350855,1356420,1359045
        
1358580,1355055,1348695,1340040,1329630,1318455
        
1306935,1297380,1286865,1277730,1274550,1271556); 
  
var DifferenceInYear=31556926
  
var BeginTime=new Date(1901/1/1); 
  BeginTime.setTime(
947120460000); 
     
for(;DateGL.getYear()<BeginTime.getYear();){ 
        BeginTime.setTime(BeginTime.getTime()
-DifferenceInYear*1000); 
     } 
     
for(;DateGL.getYear()>BeginTime.getYear();){ 
        BeginTime.setTime(BeginTime.getTime()
+DifferenceInYear*1000); 
     } 
     
for(var M=0;DateGL.getMonth()>BeginTime.getMonth();M++){ 
        BeginTime.setTime(BeginTime.getTime()
+DifferenceInMonth[M]*1000); 
     } 
     
if(DateGL.getDate()>BeginTime.getDate()){ 
        BeginTime.setTime(BeginTime.getTime()
+DifferenceInMonth[M]*1000); 
        M
++
     } 
     
if(DateGL.getDate()>BeginTime.getDate()){ 
        BeginTime.setTime(BeginTime.getTime()
+DifferenceInMonth[M]*1000); 
        M
==23?M=0:M++
     } 
  
var JQ; 
  
if(DateGL.getDate()==BeginTime.getDate()){ 
    JQ
="  今天是<font color='#FF9999'><b>"+SolarTermStr[M] + "</b></font>"
  } 
  
else if(DateGL.getDate()==BeginTime.getDate()-1){ 
    JQ
="  明天是<font color='#FF9999'><b>"+SolarTermStr[M] + "</b></font>"
  } 
  
else if(DateGL.getDate()==BeginTime.getDate()-2){ 
    JQ
="  后天是<font color='#FF9999'><b>"+SolarTermStr[M] + "</b></font>"
  } 
  
else
   JQ
=" " 
   
if(DateGL.getMonth()==BeginTime.getMonth()){ 
      JQ
+="  本月"
   } 
   
else
     JQ
+="  下月"
   } 
   JQ
+=BeginTime.getDate()+""+"<font color='#FF9999'><b>"+SolarTermStr[M]+"</b></font>"
  } 
return JQ; 

function CAL() 
{} 
RunGLNL();
function CurentTime(){  
    
var now = new Date();  
    
var hh = now.getHours();  
    
var mm = now.getMinutes();  
    
var ss = now.getTime() % 60000;  
    ss 
= (ss - (ss % 1000)) / 1000;  
    
var clock = hh+':';  
    
if (mm < 10) clock += '0';  
    clock 
+= mm+':';  
    
if (ss < 10) clock += '0';  
    clock 
+= ss;  
    
return(clock);  
}  
</SCRIPT>
原文地址:https://www.cnblogs.com/zengxiangzhan/p/1565322.html