001 | <% '@LANGUAGE="VBSCRIPT" CODEPAGE="65001"%> |
002 | <% 'Response.CodePage="65001"%> |
003 | <% 'Response.Charset="UTF-8" %> |
004 | <% |
005 | 'Option Explicit |
006 | '*********************************************** |
007 | ' 类名称:ChinaDay |
008 | ' 用途: |
009 | ' 根据输入的日期计算该日期的农历天干地支及当年属相 |
010 | ' 使用方法: |
011 | ' 第一个参数为输入参数,不填写默认为当日, |
012 | ' 只计算1921-2-8之后的日期 |
013 | '*********************************************** |
014 | 'Dim objChinaDay |
015 | 'Dim sDay, sWeekDay, sChinaDay, sChinaYear,sChinaAni |
016 | 'Set objChinaDay = New ChinaDay |
017 | 'Call objChinaDay.Action("",sDay,sWeekDay,sChinaYear,sChinaDay,sChinaAni) |
018 | 'Response.Write sDay&"<BR>" |
019 | 'Response.Write sWeekDay&"<BR>" |
020 | 'Response.Write sChinaYear&"<BR>" |
021 | 'Response.Write sChinaDay&"<BR>" |
022 | 'Response.Write sChinaAni&"<BR>" |
023 | ''*********************************** |
024 | 'set aa=new ChinaDay |
025 | 'inDay=cdate("2008-10-9") |
026 | 'call aa.Action(inDay,sDay1,sWeekDay1,sChinaYear1,sChinaDay1,sChinaAni1) |
027 | 'response.write sDay1&"<br>" |
028 | 'response.write sWeekDay1&"<br>" |
029 | 'response.write sChinaYear1&"<br>" |
030 | 'response.write sChinaDay1&"<br>" |
031 | 'response.write sChinaAni1&"<br>" |
032 | 'response.write sDay1 |
033 |
034 | set aa=nothing |
035 |
036 | Class ChinaDay |
037 | Dim arrWeekName(7), MonthAdd(11), NongliData(99) |
038 | Dim arrTianGan(9), arrDiZhi(11), arrShuXiang(11), arrDayName(30), arrMonName(12) |
039 | Dim curTime, curYear, curMonth, curDay, curWeekday |
040 | Dim i, m, n, k, isEnd, bit, TheDate |
041 | |
042 | '初始化数据 |
043 | Sub Class_Initialize() |
044 | '--------------------------------------------------- |
045 | '定义显示字串 |
046 | |
047 | '星期名 |
048 | arrWeekName(0) = "*" |
049 | arrWeekName(1) = "星期日" |
050 | arrWeekName(2) = "星期一" |
051 | arrWeekName(3) = "星期二" |
052 | arrWeekName(4) = "星期三" |
053 | arrWeekName(5) = "星期四" |
054 | arrWeekName(6) = "星期五" |
055 | arrWeekName(7) = "星期六" |
056 | |
057 | '天干名称 |
058 | arrTianGan(0) = "甲" |
059 | arrTianGan(1) = "乙" |
060 | arrTianGan(2) = "丙" |
061 | arrTianGan(3) = "丁" |
062 | arrTianGan(4) = "戊" |
063 | arrTianGan(5) = "己" |
064 | arrTianGan(6) = "庚" |
065 | arrTianGan(7) = "辛" |
066 | arrTianGan(8) = "壬" |
067 | arrTianGan(9) = "癸" |
068 | |
069 | '地支名称 |
070 | arrDiZhi(0) = "子" |
071 | arrDiZhi(1) = "丑" |
072 | arrDiZhi(2) = "寅" |
073 | arrDiZhi(3) = "卯" |
074 | arrDiZhi(4) = "辰" |
075 | arrDiZhi(5) = "巳" |
076 | arrDiZhi(6) = "午" |
077 | arrDiZhi(7) = "未" |
078 | arrDiZhi(8) = "申" |
079 | arrDiZhi(9) = "酉" |
080 | arrDiZhi(10) = "戌" |
081 | arrDiZhi(11) = "亥" |
082 | |
083 | '属相名称 |
084 | arrShuXiang(0) = "鼠" |
085 | arrShuXiang(1) = "牛" |
086 | arrShuXiang(2) = "虎" |
087 | arrShuXiang(3) = "兔" |
088 | arrShuXiang(4) = "龙" |
089 | arrShuXiang(5) = "蛇" |
090 | arrShuXiang(6) = "马" |
091 | arrShuXiang(7) = "羊" |
092 | arrShuXiang(8) = "猴" |
093 | arrShuXiang(9) = "鸡" |
094 | arrShuXiang(10) = "狗" |
095 | arrShuXiang(11) = "猪" |
096 | |
097 | '农历日期名 |
098 | arrDayName(0) = "*" |
099 | arrDayName(1) = "初一" |
100 | arrDayName(2) = "初二" |
101 | arrDayName(3) = "初三" |
102 | arrDayName(4) = "初四" |
103 | arrDayName(5) = "初五" |
104 | arrDayName(6) = "初六" |
105 | arrDayName(7) = "初七" |
106 | arrDayName(8) = "初八" |
107 | arrDayName(9) = "初九" |
108 | arrDayName(10) = "初十" |
109 | arrDayName(11) = "十一" |
110 | arrDayName(12) = "十二" |
111 | arrDayName(13) = "十三" |
112 | arrDayName(14) = "十四" |
113 | arrDayName(15) = "十五" |
114 | arrDayName(16) = "十六" |
115 | arrDayName(17) = "十七" |
116 | arrDayName(18) = "十八" |
117 | arrDayName(19) = "十九" |
118 | arrDayName(20) = "二十" |
119 | arrDayName(21) = "廿一" |
120 | arrDayName(22) = "廿二" |
121 | arrDayName(23) = "廿三" |
122 | arrDayName(24) = "廿四" |
123 | arrDayName(25) = "廿五" |
124 | arrDayName(26) = "廿六" |
125 | arrDayName(27) = "廿七" |
126 | arrDayName(28) = "廿八" |
127 | arrDayName(29) = "廿九" |
128 | arrDayName(30) = "三十" |
129 | |
130 | '农历月份名 |
131 | arrMonName(0) = "*" |
132 | arrMonName(1) = "正" |
133 | arrMonName(2) = "二" |
134 | arrMonName(3) = "三" |
135 | arrMonName(4) = "四" |
136 | arrMonName(5) = "五" |
137 | arrMonName(6) = "六" |
138 | arrMonName(7) = "七" |
139 | arrMonName(8) = "八" |
140 | arrMonName(9) = "九" |
141 | arrMonName(10) = "十" |
142 | arrMonName(11) = "十一" |
143 | arrMonName(12) = "腊" |
144 | |
145 | '--------------------------------------------------------- |
146 | '公差数据定义 |
147 | |
148 | '公历每月前面的天数 |
149 | MonthAdd(0) = 0 |
150 | MonthAdd(1) = 31 |
151 | MonthAdd(2) = 59 |
152 | MonthAdd(3) = 90 |
153 | MonthAdd(4) = 120 |
154 | MonthAdd(5) = 151 |
155 | MonthAdd(6) = 181 |
156 | MonthAdd(7) = 212 |
157 | MonthAdd(8) = 243 |
158 | MonthAdd(9) = 273 |
159 | MonthAdd(10) = 304 |
160 | MonthAdd(11) = 334 |
161 | |
162 | '农历数据 |
163 | NongliData(0) = 2635 |
164 | NongliData(1) = 333387 |
165 | NongliData(2) = 1701 |
166 | NongliData(3) = 1748 |
167 | NongliData(4) = 267701 |
168 | NongliData(5) = 694 |
169 | NongliData(6) = 2391 |
170 | NongliData(7) = 133423 |
171 | NongliData(8) = 1175 |
172 | NongliData(9) = 396438 |
173 | NongliData(10) = 3402 |
174 | NongliData(11) = 3749 |
175 | NongliData(12) = 331177 |
176 | NongliData(13) = 1453 |
177 | NongliData(14) = 694 |
178 | NongliData(15) = 201326 |
179 | NongliData(16) = 2350 |
180 | NongliData(17) = 465197 |
181 | NongliData(18) = 3221 |
182 | NongliData(19) = 3402 |
183 | NongliData(20) = 400202 |
184 | NongliData(21) = 2901 |
185 | NongliData(22) = 1386 |
186 | NongliData(23) = 267611 |
187 | NongliData(24) = 605 |
188 | NongliData(25) = 2349 |
189 | NongliData(26) = 137515 |
190 | NongliData(27) = 2709 |
191 | NongliData(28) = 464533 |
192 | NongliData(29) = 1738 |
193 | NongliData(30) = 2901 |
194 | NongliData(31) = 330421 |
195 | NongliData(32) = 1242 |
196 | NongliData(33) = 2651 |
197 | NongliData(34) = 199255 |
198 | NongliData(35) = 1323 |
199 | NongliData(36) = 529706 |
200 | NongliData(37) = 3733 |
201 | NongliData(38) = 1706 |
202 | NongliData(39) = 398762 |
203 | NongliData(40) = 2741 |
204 | NongliData(41) = 1206 |
205 | NongliData(42) = 267438 |
206 | NongliData(43) = 2647 |
207 | NongliData(44) = 1318 |
208 | NongliData(45) = 204070 |
209 | NongliData(46) = 3477 |
210 | NongliData(47) = 461653 |
211 | NongliData(48) = 1386 |
212 | NongliData(49) = 2413 |
213 | NongliData(50) = 330077 |
214 | NongliData(51) = 1197 |
215 | NongliData(52) = 2637 |
216 | NongliData(53) = 268877 |
217 | NongliData(54) = 3365 |
218 | NongliData(55) = 531109 |
219 | NongliData(56) = 2900 |
220 | NongliData(57) = 2922 |
221 | NongliData(58) = 398042 |
222 | NongliData(59) = 2395 |
223 | NongliData(60) = 1179 |
224 | NongliData(61) = 267415 |
225 | NongliData(62) = 2635 |
226 | NongliData(63) = 661067 |
227 | NongliData(64) = 1701 |
228 | NongliData(65) = 1748 |
229 | NongliData(66) = 398772 |
230 | NongliData(67) = 2742 |
231 | NongliData(68) = 2391 |
232 | NongliData(69) = 330031 |
233 | NongliData(70) = 1175 |
234 | NongliData(71) = 1611 |
235 | NongliData(72) = 200010 |
236 | NongliData(73) = 3749 |
237 | NongliData(74) = 527717 |
238 | NongliData(75) = 1452 |
239 | NongliData(76) = 2742 |
240 | NongliData(77) = 332397 |
241 | NongliData(78) = 2350 |
242 | NongliData(79) = 3222 |
243 | NongliData(80) = 268949 |
244 | NongliData(81) = 3402 |
245 | NongliData(82) = 3493 |
246 | NongliData(83) = 133973 |
247 | NongliData(84) = 1386 |
248 | NongliData(85) = 464219 |
249 | NongliData(86) = 605 |
250 | NongliData(87) = 2349 |
251 | NongliData(88) = 334123 |
252 | NongliData(89) = 2709 |
253 | NongliData(90) = 2890 |
254 | NongliData(91) = 267946 |
255 | NongliData(92) = 2773 |
256 | NongliData(93) = 592565 |
257 | NongliData(94) = 1210 |
258 | NongliData(95) = 2651 |
259 | NongliData(96) = 395863 |
260 | NongliData(97) = 1323 |
261 | NongliData(98) = 2707 |
262 | NongliData(99) = 265877 |
263 | End Sub |
264 | |
265 | '############################################################ |
266 | '主要方法 Action |
267 | ' inDay 输入日期,如果不输入则默认为当前日期 |
268 | ' sDay 中文格式日期 |
269 | ' sWeekDay 周几 |
270 | ' sChinaYear 农历年 |
271 | ' sChinaDay 农历日 |
272 | ' sChinaAni 属相 |
273 | '############################################################ |
274 | Public Function Action(inDay,sDay,sWeekDay,sChinaYear,sChinaDay,sChinaAni) |
275 | |
276 | '转换要转换的日期 |
277 | If inDay= "" Or Not IsDate(inDay) Then |
278 | '获取当前系统时间 |
279 | curTime = Now() |
280 | Else |
281 | curTime = CDate (inDay) |
282 | End If |
283 | |
284 | If Datediff( "d" ,curTime,Cdate( "1921-2-8" ))>0 Then |
285 | Exit Function |
286 | End If |
287 | |
288 | '生成当前公历年、月、日 ==> sDay |
289 | curYear = Year(curTime) |
290 | curMonth = Month(curTime) |
291 | curDay = Day(curTime) |
292 | |
293 | sDay = curYear& "年" |
294 | If (curMonth < 10) Then |
295 | sDay = sDay& "0" &curMonth& "月" |
296 | Else |
297 | sDay = sDay&curMonth& "月" |
298 | End If |
299 | If (curDay < 10) Then |
300 | sDay = sDay& "0" &curDay& "日" |
301 | Else |
302 | sDay = sDay&curDay& "日" |
303 | End If |
304 | |
305 | '生成当前公历星期 ==> sWeekDay |
306 | curWeekday = Weekday(curTime) |
307 | sWeekDay = arrWeekName(curWeekday) |
308 | |
309 | '计算到初始时间1921年2月8日的天数:1921-2-8(正月初一) |
310 | TheDate = (curYear - 1921) * 365 + Int((curYear - 1921) / 4) + curDay + MonthAdd(curMonth - 1) - 38 |
311 | If ((curYear Mod 4) = 0 AND curMonth > 2) Then |
312 | TheDate = TheDate + 1 |
313 | End If |
314 | |
315 | '计算农历天干、地支、月、日 |
316 | isEnd = 0 |
317 | m = 0 |
318 | '------------------------------------ |
319 | Do |
320 | If (NongliData(m) < 4095) Then |
321 | k = 11 |
322 | Else |
323 | k = 12 |
324 | End if |
325 | |
326 | n = k |
327 | '------------------------------------ |
328 | Do |
329 | If (n < 0) Then |
330 | Exit Do |
331 | End If |
332 | |
333 | '获取NongliData(m)的第n个二进制位的值 |
334 | bit = NongliData(m) |
335 | For i = 1 To n Step 1 |
336 | bit = Int(bit / 2) |
337 | Next |
338 | bit = bit Mod 2 |
339 | |
340 | If (TheDate <= 29 + bit) Then |
341 | isEnd = 1 |
342 | Exit Do |
343 | End If |
344 | |
345 | TheDate = TheDate - 29 - bit |
346 | |
347 | n = n - 1 |
348 | Loop |
349 | '------------------------------------ |
350 | If (isEnd = 1) Then |
351 | Exit Do |
352 | End If |
353 | |
354 | m = m + 1 |
355 | Loop |
356 | '------------------------------------ |
357 | |
358 | curYear = 1921 + m |
359 | curMonth = k - n + 1 |
360 | curDay = TheDate |
361 | |
362 | If (k = 12) Then |
363 | If (curMonth = (Int(NongliData(m) / 65536) + 1)) Then |
364 | curMonth = 1 - curMonth |
365 | ElseIf (curMonth > (Int(NongliData(m) / 65536) + 1)) Then |
366 | curMonth = curMonth - 1 |
367 | End if |
368 | End If |
369 | |
370 | '生成农历天干、地支==> sChinaYear |
371 | sChinaYear = "农历" &arrTianGan(((curYear - 4) Mod 60) Mod 10)&arrDiZhi(((curYear - 4) Mod 60) Mod 12)& "年" |
372 | '生成属相 == > sChinaAni |
373 | sChinaAni = arrShuXiang(((curYear - 4) Mod 60) Mod 12) |
374 | |
375 | '生成农历月、日 ==> NongliDayStr |
376 | If (curMonth < 1) Then |
377 | sChinaDay = "闰" &arrMonName(-1 * curMonth) |
378 | Else |
379 | sChinaDay = arrMonName(curMonth) |
380 | End If |
381 | sChinaDay = sChinaDay& "月" |
382 | |
383 | sChinaDay = sChinaDay & arrDayName(curDay) |
384 | End Function |
385 | End Class |
386 |
387 | Dim objChinaDay |
388 | Dim sDay, sWeekDay, sChinaDay, sChinaYear,sChinaAni |
389 | Set objChinaDay = New ChinaDay |
390 | Call objChinaDay.Action( "" ,sDay,sWeekDay,sChinaYear,sChinaDay,sChinaAni) |
391 | Response.Write sDay& " " |
392 | Response.Write sWeekDay& " " |
393 | Response.Write sChinaYear& "" |
394 | Response.Write sChinaAni& " " |
395 | Response.Write sChinaDay& " " |
396 | %> |