< 
'Option Explicit  
'
*********************************************************************************  
'
 类名称:ChinaDay  
'
 用途:  
'
  根据输入的日期计算该日期的农历天干地支及当年属相  
'
 使用方法:  
'
 第一个参数为输入参数,不填写默认为当日,  
'
 只计算1921-2-8之后的日期  
'
 ##-------------------------------------------##  
'
 Dim objChinaDay  
'
 Dim sDay, sWeekDay, sChinaDay, sChinaYear,sChinaAni  
'
 Set objChinaDay = New  ChinaDay  
'
 Call objChinaDay.Action("",sDay,sWeekDay,sChinaYear,sChinaDay,sChinaAni)  
'
 Response.Write sDay&"<BR>"  
'
 Response.Write sWeekDay&"<BR>"  
'
 Response.Write sChinaYear&"<BR>"  
'
 Response.Write sChinaDay&"<BR>"  
'
 Response.Write sChinaAni&"<BR>"  
'
 ##-------------------------------------------##  
'
 Modify By:Babyt(阿泰)  
'
 Mail:  Babyt@mail.csdn.net  
'
 Welcome To:  
'
   http://blog.csdn.net/babyt/  
'
   http://www.facesun.cn  
'
 Created At: 2005-2-20  
'
 Copyright: 本代码非原创,是2001年收集的,原作者未知。  
'
 License:Free  
'
*********************************************************************************  
Class ChinaDay  
   
 
Dim arrWeekName(7), MonthAdd(11), NongliData(99 
 
Dim arrTianGan(9), arrDiZhi(11), arrShuXiang(11), arrDayName(30), arrMonName(12 
 
Dim curTime, curYear, curMonth, curDay, curWeekday  
 
Dim i, m, n, k, isEnd, bit, TheDate  
   
 
'初始化数据  
 Sub Class_Initialize()  
  
'-------------------------------------------------------------------------  
  '定义显示字串  
    
  
'星期名  
  arrWeekName(0= "*"  
  arrWeekName(
1= "星期日"  
  arrWeekName(
2= "星期一"  
  arrWeekName(
3= "星期二"  
  arrWeekName(
4= "星期三"  
  arrWeekName(
5= "星期四"  
  arrWeekName(
6= "星期五"  
  arrWeekName(
7= "星期六"  
    
  
'天干名称  
  arrTianGan(0= ""  
  arrTianGan(
1= ""  
  arrTianGan(
2= ""  
  arrTianGan(
3= ""  
  arrTianGan(
4= ""  
  arrTianGan(
5= ""  
  arrTianGan(
6= ""  
  arrTianGan(
7= ""  
  arrTianGan(
8= ""  
  arrTianGan(
9= ""  
    
  
'地支名称  
  arrDiZhi(0= ""  
  arrDiZhi(
1= ""  
  arrDiZhi(
2= ""  
  arrDiZhi(
3= ""  
  arrDiZhi(
4= ""  
  arrDiZhi(
5= ""  
  arrDiZhi(
6= ""  
  arrDiZhi(
7= ""  
  arrDiZhi(
8= ""  
  arrDiZhi(
9= ""  
  arrDiZhi(
10= ""  
  arrDiZhi(
11= ""  
    
  
'属相名称  
  arrShuXiang(0= ""  
  arrShuXiang(
1= ""  
  arrShuXiang(
2= ""  
  arrShuXiang(
3= ""  
  arrShuXiang(
4= ""  
  arrShuXiang(
5= ""  
  arrShuXiang(
6= ""  
  arrShuXiang(
7= ""  
  arrShuXiang(
8= ""  
  arrShuXiang(
9= ""  
  arrShuXiang(
10= ""  
  arrShuXiang(
11= ""  
    
  
'农历日期名  
  arrDayName(0= "*"  
  arrDayName(
1= "初一"  
  arrDayName(
2= "初二"  
  arrDayName(
3= "初三"  
  arrDayName(
4= "初四"  
  arrDayName(
5= "初五"  
  arrDayName(
6= "初六"  
  arrDayName(
7= "初七"  
  arrDayName(
8= "初八"  
  arrDayName(
9= "初九"  
  arrDayName(
10= "初十"  
  arrDayName(
11= "十一"  
  arrDayName(
12= "十二"  
  arrDayName(
13= "十三"  
  arrDayName(
14= "十四"  
  arrDayName(
15= "十五"  
  arrDayName(
16= "十六"  
  arrDayName(
17= "十七"  
  arrDayName(
18= "十八"  
  arrDayName(
19= "十九"  
  arrDayName(
20= "二十"  
  arrDayName(
21= "廿一"  
  arrDayName(
22= "廿二"  
  arrDayName(
23= "廿三"  
  arrDayName(
24= "廿四"  
  arrDayName(
25= "廿五"  
  arrDayName(
26= "廿六"  
  arrDayName(
27= "廿七"  
  arrDayName(
28= "廿八"  
  arrDayName(
29= "廿九"  
  arrDayName(
30= "三十"  
    
  
'农历月份名  
  arrMonName(0= "*"  
  arrMonName(
1= ""  
  arrMonName(
2= ""  
  arrMonName(
3= ""  
  arrMonName(
4= ""  
  arrMonName(
5= ""  
  arrMonName(
6= ""  
  arrMonName(
7= ""  
  arrMonName(
8= ""  
  arrMonName(
9= ""  
  arrMonName(
10= ""  
  arrMonName(
11= "十一"  
  arrMonName(
12= ""  
    
  
'-------------------------------------------------------------------------  
  '公差数据定义  
    
  
'公历每月前面的天数  
  MonthAdd(0= 0  
  MonthAdd(
1= 31  
  MonthAdd(
2= 59  
  MonthAdd(
3= 90  
  MonthAdd(
4= 120  
  MonthAdd(
5= 151  
  MonthAdd(
6= 181  
  MonthAdd(
7= 212  
  MonthAdd(
8= 243  
  MonthAdd(
9= 273  
  MonthAdd(
10= 304  
  MonthAdd(
11= 334  
    
  
'农历数据  
  NongliData(0= 2635  
  NongliData(
1= 333387  
  NongliData(
2= 1701  
  NongliData(
3= 1748  
  NongliData(
4= 267701  
  NongliData(
5= 694  
  NongliData(
6= 2391  
  NongliData(
7= 133423  
  NongliData(
8= 1175  
  NongliData(
9= 396438  
  NongliData(
10= 3402  
  NongliData(
11= 3749  
  NongliData(
12= 331177  
  NongliData(
13= 1453  
  NongliData(
14= 694  
  NongliData(
15= 201326  
  NongliData(
16= 2350  
  NongliData(
17= 465197  
  NongliData(
18= 3221  
  NongliData(
19= 3402  
  NongliData(
20= 400202  
  NongliData(
21= 2901  
  NongliData(
22= 1386  
  NongliData(
23= 267611  
  NongliData(
24= 605  
  NongliData(
25= 2349  
  NongliData(
26= 137515  
  NongliData(
27= 2709  
  NongliData(
28= 464533  
  NongliData(
29= 1738  
  NongliData(
30= 2901  
  NongliData(
31= 330421  
  NongliData(
32= 1242  
  NongliData(
33= 2651  
  NongliData(
34= 199255  
  NongliData(
35= 1323  
  NongliData(
36= 529706  
  NongliData(
37= 3733  
  NongliData(
38= 1706  
  NongliData(
39= 398762  
  NongliData(
40= 2741  
  NongliData(
41= 1206  
  NongliData(
42= 267438  
  NongliData(
43= 2647  
  NongliData(
44= 1318  
  NongliData(
45= 204070  
  NongliData(
46= 3477  
  NongliData(
47= 461653  
  NongliData(
48= 1386  
  NongliData(
49= 2413  
  NongliData(
50= 330077  
  NongliData(
51= 1197  
  NongliData(
52= 2637  
  NongliData(
53= 268877  
  NongliData(
54= 3365  
  NongliData(
55= 531109  
  NongliData(
56= 2900  
  NongliData(
57= 2922  
  NongliData(
58= 398042  
  NongliData(
59= 2395  
  NongliData(
60= 1179  
  NongliData(
61= 267415  
  NongliData(
62= 2635  
  NongliData(
63= 661067  
  NongliData(
64= 1701  
  NongliData(
65= 1748  
  NongliData(
66= 398772  
  NongliData(
67= 2742  
  NongliData(
68= 2391  
  NongliData(
69= 330031  
  NongliData(
70= 1175  
  NongliData(
71= 1611  
  NongliData(
72= 200010  
  NongliData(
73= 3749  
  NongliData(
74= 527717  
  NongliData(
75= 1452  
  NongliData(
76= 2742  
  NongliData(
77= 332397  
  NongliData(
78= 2350  
  NongliData(
79= 3222  
  NongliData(
80= 268949  
  NongliData(
81= 3402  
  NongliData(
82= 3493  
  NongliData(
83= 133973  
  NongliData(
84= 1386  
  NongliData(
85= 464219  
  NongliData(
86= 605  
  NongliData(
87= 2349  
  NongliData(
88= 334123  
  NongliData(
89= 2709  
  NongliData(
90= 2890  
  NongliData(
91= 267946  
  NongliData(
92= 2773  
  NongliData(
93= 592565  
  NongliData(
94= 1210  
  NongliData(
95= 2651  
  NongliData(
96= 395863  
  NongliData(
97= 1323  
  NongliData(
98= 2707  
  NongliData(
99= 265877  
 
End Sub  
   
 
'#################################################################  
 '主要方法 Action  
 ' inDay 输入日期,如果不输入则默认为当前日期  
 ' sDay 中文格式日期  
 ' sWeekDay 周几  
 ' sChinaYear 农历年  
 ' sChinaDay 农历日  
 ' sChinaAni 属相  
 '#################################################################  
 Public Function Action(inDay,sDay,sWeekDay,sChinaYear,sChinaDay,sChinaAni)  
    
  
'转换要转换的日期  
  If inDay="" Or Not IsDate(inDay) Then  
   
'获取当前系统时间  
   curTime = Now()  
  
Else  
   curTime 
= CDate(inDay)  
  
End If  
    
  
If Datediff("d",curTime,Cdate("1921-2-8"))>0 Then  
   
Exit Function  
  
End If  
    
  
'生成当前公历年、月、日 ==> sDay  
  curYear = Year(curTime)  
  curMonth 
= Month(curTime)  
  curDay 
= Day(curTime)  
    
  sDay 
= curYear&""  
  
If (curMonth < 10Then  
   sDay 
= sDay&"0"&curMonth&""  
  
Else  
   sDay 
= sDay&curMonth&""  
  
End If  
  
If (curDay < 10Then  
   sDay 
= sDay&"0"&curDay&""  
  
Else  
   sDay 
= sDay&curDay&""  
  
End If  
    
  
'生成当前公历星期 ==> sWeekDay  
  curWeekday = Weekday(curTime)  
  sWeekDay 
= arrWeekName(curWeekday)  
    
  
'计算到初始时间1921年2月8日的天数:1921-2-8(正月初一)  
  TheDate = (curYear - 1921* 365 + Int((curYear - 1921/ 4+ curDay + MonthAdd(curMonth - 1- 38  
  
If ((curYear Mod 4= 0 AND curMonth > 2Then  
   TheDate 
= TheDate + 1  
  
End If  
    
  
'计算农历天干、地支、月、日  
  isEnd = 0  
  m 
= 0  
  
'------------------------------------  
  Do  
   
If (NongliData(m) < 4095Then  
    k 
= 11  
   
Else  
    k 
= 12  
   
End if  
     
   n 
= k  
   
'------------------------------------  
   Do  
    
If (n < 0Then  
     
Exit Do  
    
End If  
      
    
'获取NongliData(m)的第n个二进制位的值  
    bit = NongliData(m)  
    
For i = 1 To n Step 1  
     bit 
= Int(bit / 2 
    
Next  
    bit 
= bit Mod 2  
      
    
If (TheDate <= 29 + bit) Then  
     isEnd 
= 1  
     
Exit Do  
    
End If  
      
    TheDate 
= TheDate - 29 - bit  
      
    n 
= n - 1  
   
Loop  
   
'------------------------------------  
   If (isEnd = 1Then  
    
Exit Do  
   
End If  
     
   m 
= m + 1  
  
Loop  
  
'------------------------------------  
    
  curYear 
= 1921 + m  
  curMonth 
= k - n + 1  
  curDay 
= TheDate  
    
  
If (k = 12Then  
   
If (curMonth = (Int(NongliData(m) / 65536+ 1)) Then  
    curMonth 
= 1 - curMonth  
   
ElseIf (curMonth > (Int(NongliData(m) / 65536+ 1)) Then  
    curMonth 
= curMonth - 1  
   
End if    
  
End If  
    
  
'生成农历天干、地支==> sChinaYear  
  sChinaYear = "农历"&arrTianGan(((curYear - 4Mod 60Mod 10)&arrDiZhi(((curYear - 4Mod 60Mod 12)&""  
  
'生成属相 == > sChinaAni  
  sChinaAni = arrShuXiang(((curYear - 4Mod 60Mod 12 
    
  
'生成农历月、日 ==> NongliDayStr  
  If (curMonth < 1Then  
   sChinaDay 
= ""&arrMonName(-1 * curMonth)  
  
Else  
   sChinaDay 
= arrMonName(curMonth)  
  
End If  
  sChinaDay 
= sChinaDay&""  
    
  sChinaDay 
= sChinaDay & arrDayName(curDay)  
 
End Function  
End Class  
%
>


以下为调用文件:

<!--#include File="clsDay.asp"--> 
<% 
Dim objChinaDay 
Dim sDay, sWeekDay, sChinaDay, sChinaYear,sChinaAni 
Set objChinaDay = New  ChinaDay 
Call objChinaDay.Action("",sDay,sWeekDay,sChinaYear,sChinaDay,sChinaAni) 
Set objChinaDay = Nothing 
'Response.Write sDay&"<BR>" 
'Response.Write sWeekDay&"<BR>" 
'Response.Write sChinaYear&"<BR>" 
'Response.Write sChinaDay&"<BR>" 
'Response.Write sChinaAni&"<BR>" 
%> 
<html> 
<head> 
  <meta http-equiv="Content-Type" content="text/html; charset=gb2312"> 
  <title>农历日历</title> 
  <style> 
    .itm {font-family: 宋体; font-size: 14px;} 
    .chn {font-family: 宋体; font-size: 12px} 
    .chnred {font-family: 宋体; color: #FF0000; font-size: 12px} 
    .chnblue {font-family: 宋体; color: #0000FF; font-size: 12px} 
  </style> 
</head> 
 
<body bgcolor="#FFFFFF"> 
<!--显示站点日历--> 
<table border="1" cellspacing="1" width="110" bgcolor="#EAEAEA" bordercolor="#FFFFFF" 
bordercolorlight="#000000"> 
 <tr> <td><center><table> 
  <tr> 
    <td class="chnblue" align="center" valign="middle"><%=sDay%> 
</td> 
  </tr> 
  <tr> 
    <td class="chnred" align="center" valign="middle"><%=sWeekDay%> 
</td> 
  </tr> 
  <tr> 
    <td class="chnblue" align="center" valign="middle"><%=sChinaYear & "(" & sChinaAni & ")"%> 
</td> 
  </tr> 
  <tr> 
    <td class="chnred" align="center" valign="middle"><%=sChinaDay%> 
</td> 
  </tr> 
  </td> 
  </tr> 
  </table> 
</table> 
</body> 
</html>

原文发表于:
http://www.cnblogs.com/babyt/archive/2005/03/11/116547.html
http://www.cnblogs.com/babyt/archive/2005/03/11/116548.html