<%'@LANGUAGE="VBSCRIPT" CODEPAGE="65001"%> <%'Response.CodePage="65001"%> <%'Response.Charset="UTF-8" %> <% '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>" ''*********************************** 'set aa=new ChinaDay 'inDay=cdate("2008-10-9") 'call aa.Action(inDay,sDay1,sWeekDay1,sChinaYear1,sChinaDay1,sChinaAni1) 'response.write sDay1&"<br>" 'response.write sWeekDay1&"<br>" 'response.write sChinaYear1&"<br>" 'response.write sChinaDay1&"<br>" 'response.write sChinaAni1&"<br>" 'response.write sDay1 set aa=nothing 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 < 10) Then sDay = sDay&"0"&curMonth&"月" Else sDay = sDay&curMonth&"月" End If If (curDay < 10) Then 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 > 2) Then TheDate = TheDate + 1 End If '计算农历天干、地支、月、日 isEnd = 0 m = 0 '------------------------------------ Do If (NongliData(m) < 4095) Then k = 11 Else k = 12 End if n = k '------------------------------------ Do If (n < 0) Then 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 = 1) Then Exit Do End If m = m + 1 Loop '------------------------------------ curYear = 1921 + m curMonth = k - n + 1 curDay = TheDate If (k = 12) Then 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 - 4) Mod 60) Mod 10)&arrDiZhi(((curYear - 4) Mod 60) Mod 12)&"年" '生成属相 == > sChinaAni sChinaAni = arrShuXiang(((curYear - 4) Mod 60) Mod 12) '生成农历月、日 ==> NongliDayStr If (curMonth < 1) Then sChinaDay = "闰"&arrMonName(-1 * curMonth) Else sChinaDay = arrMonName(curMonth) End If sChinaDay = sChinaDay&"月" sChinaDay = sChinaDay & arrDayName(curDay) End Function End Class Dim objChinaDay Dim sDay, sWeekDay, sChinaDay, sChinaYear,sChinaAni Set objChinaDay = New ChinaDay Call objChinaDay.Action("",sDay,sWeekDay,sChinaYear,sChinaDay,sChinaAni) Response.Write sDay&" " Response.Write sWeekDay&" " Response.Write sChinaYear&"" Response.Write sChinaAni&" " Response.Write sChinaDay&" " %>