<%
'Opción explícita
'************************************************
' Nombre de clase: ChinaDay
'Objetivo:
'Calcule los tallos y ramas del calendario lunar de la fecha y el signo zodiacal del año en función de la fecha ingresada
' Uso:
'El primer parámetro es el parámetro de entrada. Si no se completa, el valor predeterminado es el día actual.
'Calcular sólo fechas posteriores a 1921-2-8
' ##----------------------------------------------- -##
'Dim objChinaDay
' Dim sDay, sWeekDay, sChinaDay, sChinaYear,sChinaAni
' Establecer objChinaDay = Nuevo ChinaDay
' Llamar a objChinaDay.Action("",sDay,sWeekDay,sChinaYear,sChinaDay,sChinaAni)
' Respuesta.Escribir sDía&"<BR>"
' Respuesta.Escribir sWeekDay&"<BR>"
' Respuesta.Escribir sChinaYear&"<BR>"
' Respuesta.Escribir sChinaDay&"<BR>"
' Respuesta.Escribir sChinaAni&"<BR>"
' ##----------------------------------------------- -##
' Modificar por:Babyt(Artest)
'Correo: [email protected]
'Bienvenido a:
' http://blog.csdn.net/babyt/
' http://www.facesun.cn
' Creado en: 2005-2-20
' Copyright: este código no es original y se recopiló en 2001. Se desconoce el autor original.
'Licencia:Gratis
'************************************************ * ***
ClaseChinaDía
Dim arrWeekName(7), MonthAdd(11), NongliData(99)
Dim arrTianGan(9), arrDiZhi(11), arrShuXiang(11), arrDayName(30), arrMonName(12)
Atenuar curTime, curYear, curMonth, curDay, curWeekday
Dim i, m, n, k, isEnd, bit, TheDate
'Inicializar datos
Subclase_Inicializar()
'------------------------------------------------ - -
'Definir cadena de visualización
'Nombre de la semana
arrNombreSemana(0) = "*"
arrWeekName(1) = "Domingo"
arrWeekName(2) = "lunes"
arrWeekName(3) = "Martes"
arrWeekName(4) = "Miércoles"
arrWeekName(5) = "Jueves"
arrWeekName(6) = "Viernes"
arrWeekName(7) = "Sábado"
'Nombre de raíz celestial
arrTianGan(0) = "A"
arrTianGan(1) = "B"
arrTianGan(2) = "C"
arrTianGan(3) = "丁"
arrTianGan(4) = "五"
arrTianGan(5) = "自"
arrTianGan(6) = "庚"
arrTianGan(7) = "Xin"
arrTianGan(8) = "嬣"
arrTianGan(9) = "癸"
'Nombre de la rama terrenal
arrDiZhi(0) = "子"
arrDiZhi(1) = "feo"
arrDiZhi(2) = "Yin"
arrDiZhi(3) = "卯"
arrDiZhi(4) = "陈"
arrDiZhi(5) = "巳"
arrDiZhi(6) = "tarde"
arrDiZhi(7) = "No"
arrDiZhi(8) = "Shen"
arrDiZhi(9) = "Tú"
arrDiZhi(10) = "戌"
arrDiZhi(11) = "海"
'Nombre del zodiaco
arrShuXiang(0) = "rata"
arrShuXiang(1) = "Vaca"
arrShuXiang(2) = "Tigre"
arrShuXiang(3) = "Conejo"
arrShuXiang(4) = "龙"
arrShuXiang(5) = "Serpiente"
arrShuXiang(6) = "caballo"
arrShuXiang(7) = "Oveja"
arrShuXiang(8) = "Mono"
arrShuXiang(9) = "Pollo"
arrShuXiang(10) = "perro"
arrShuXiang(11) = "Cerdo"
'Nombre de la fecha del calendario lunar
arrDayName(0) = "*"
arrDayName(1) = "Primer día de escuela secundaria"
arrDayName(2) = "Segundo día de escuela secundaria"
arrDayName(3) = "El tercer día de la escuela secundaria"
arrDayName(4) = "Cuarto día"
arrDayName(5) = "El quinto día del mes lunar"
arrDayName(6) = "El sexto día del mes lunar"
arrDayName(7) = "Séptimo día"
arrDayName(8) = "El octavo día del mes lunar"
arrDayName(9) = "Noveno día del mes lunar"
arrDayName(10) = "El décimo día del mes lunar"
arrDayName(11) = "Once"
arrDayName(12) = "Doce"
arrDayName(13) = "Trece"
arrDayName(14) = "Catorce"
arrDayName(15) = "Quince"
arrDayName(16) = "Dieciséis"
arrDayName(17) = "Diecisiete"
arrDayName(18) = "Dieciocho"
arrDayName(19) = "Diecinueve"
arrDayName(20) = "Veinte"
arrDayName(21) = "Veintiuno"
arrDayName(22) = "Veintidós"
arrDayName(23) = "Veintitrés"
arrDayName(24) = "Veinticuatro"
arrDayName(25) = "Veinticinco"
arrDayName(26) = "Veintiséis"
arrDayName(27) = "Veintisiete"
arrDayName(28) = "Veintiocho"
arrDayName(29) = "Veintinueve"
arrDayName(30) = "Treinta"
'Nombre del mes lunar
arrMonName(0) = "*"
arrMonName(1) = "Positivo"
arrMonName(2) = "二"
arrMonName(3) = "三"
arrMonName(4) = "cuatro"
arrMonName(5) = "五"
arrMonName(6) = "六"
arrMonName(7) = "siete"
arrMonName(8) = "ocho"
arrMonName(9) = "九"
arrMonName(10) = "十"
arrMonName(11) = "Once"
arrMonName(12) = "Ra"
'------------------------------------------------ - -------
'Definición de datos de tolerancia
'El número de días delante de cada mes en el calendario gregoriano.
MesAgregar(0) = 0
MesAgregar(1) = 31
MesAgregar(2) = 59
MesAgregar(3) = 90
MesAgregar(4) = 120
MesAgregar(5) = 151
MesAgregar(6) = 181
MesAgregar(7) = 212
MesAgregar(8) = 243
MesAgregar(9) = 273
MesAgregar(10) = 304
MesAgregar(11) = 334
'Datos del calendario lunar
NogliData(0) = 2635
Datos nogli(1) = 333387
Datos nogli(2) = 1701
Datos nogli(3) = 1748
Datos nogli(4) = 267701
Datos nogli(5) = 694
Datos nogli(6) = 2391
Datos nogli(7) = 133423
NogliData(8) = 1175
Datos nogli(9) = 396438
Datos nogli(10) = 3402
Datos nogli(11) = 3749
Datos nogli(12) = 331177
Datos nogli(13) = 1453
Datos nogli(14) = 694
Datos nogli(15) = 201326
Datos nogli(16) = 2350
Datos nogli(17) = 465197
Datos nogli(18) = 3221
Datos nogli(19) = 3402
Datos nogli(20) = 400202
Datos nogli(21) = 2901
Datos nogli(22) = 1386
Datos nogli(23) = 267611
Datos nogli(24) = 605
Datos nogli(25) = 2349
Datos nogli(26) = 137515
Datos nogli(27) = 2709
Datos nogli(28) = 464533
Datos nogli(29) = 1738
Datos nogli(30) = 2901
Datos nogli(31) = 330421
Datos nogli(32) = 1242
Datos nogli(33) = 2651
Datos nogli(34) = 199255
Datos nogli(35) = 1323
Datos nogli(36) = 529706
Datos nogli(37) = 3733
Datos nogli(38) = 1706
Datos nogli(39) = 398762
Datos nogli(40) = 2741
Datos nogli(41) = 1206
Datos nogli(42) = 267438
Datos nogli(43) = 2647
Datos nogli(44) = 1318
Datos nogli(45) = 204070
Datos nogli(46) = 3477
Datos nogli(47) = 461653
Datos nogli(48) = 1386
Datos nogli(49) = 2413
Datos nogli(50) = 330077
Datos nogli(51) = 1197
Datos nogli(52) = 2637
Datos nogli(53) = 268877
Datos nogli(54) = 3365
Datos nogli(55) = 531109
Datos nogli(56) = 2900
Datos nogli(57) = 2922
Datos nogli(58) = 398042
Datos nogli(59) = 2395
Datos nogli(60) = 1179
Datos nogli(61) = 267415
Datos nogli(62) = 2635
Datos nogli(63) = 661067
Datos nogli(64) = 1701
Datos nogli(65) = 1748
Datos nogli(66) = 398772
Datos nogli(67) = 2742
Datos nogli(68) = 2391
Datos nogli(69) = 330031
Datos nogli(70) = 1175
Datos nogli(71) = 1611
Datos nogli(72) = 200010
Datos nogli(73) = 3749
Datos nogli(74) = 527717
Datos nogli(75) = 1452
Datos nogli(76) = 2742
Datos nogli(77) = 332397
Datos nogli(78) = 2350
Datos nogli(79) = 3222
Datos nogli(80) = 268949
Datos nogli(81) = 3402
Datos nogli(82) = 3493
Datos nogli(83) = 133973
Datos nogli(84) = 1386
Datos nogli(85) = 464219
Datos nogli(86) = 605
Datos nogli(87) = 2349
Datos nogli(88) = 334123
Datos nogli(89) = 2709
Datos nogli(90) = 2890
Datos nogli(91) = 267946
Datos nogli(92) = 2773
Datos nogli(93) = 592565
Datos nogli(94) = 1210
Datos nogli(95) = 2651
Datos nogli(96) = 395863
Datos nogli(97) = 1323
Datos nogli(98) = 2707
Datos nogli(99) = 265877
Subtítulo final
'############################################### ## #########
'Método principal Acción
' inDay Ingrese la fecha; si no se ingresa, el valor predeterminado será la fecha actual
Fecha en formato chino 'sDay
' sWeekDay Día de la semana
' sChinaAño Año Nuevo Lunar
' sChinaDay día lunar
' sChinaAni signo del zodíaco
'############################################### ## #########
Acción de función pública (inDay,sDay,sWeekDay,sChinaYear,sChinaDay,sChinaAni)
'Convierte la fecha a convertir
Si inDay="" o no esDate(inDay) Entonces
'Obtener la hora actual del sistema
curTime = Ahora()
Demás
curTime = CDate(enDía)
Terminar si
Si Datediff("d",curTime,Cdate("1921-2-8"))>0 Entonces
Función de salida
Terminar si
'Generar el año, mes y día del calendario gregoriano actual ==> sDay
curAño = Año(curHora)
curMonth = Mes(curTime)
curDía = Día(curHora)
sDía = curAño&"año"
Si (curMonth < 10) Entonces
sDía = sDía&"0"&curMes&"mes"
Demás
sDía = sDía&curMes&"mes"
Terminar si
Si (curDay < 10) entonces
sDía = sDía&"0"&curDía&"日"
Demás
sDía = sDía&curDía&"日"
Terminar si
'Generar la semana actual del calendario gregoriano ==> sWeekDay
curWeekday = Día de la semana(curTime)
sWeekDay = arrWeekName(curWeekday)
'Calcule el número de días hasta la hora inicial del 8 de febrero de 1921: 1921-2-8 (el primer día del primer mes lunar)
LaFecha = (curYear - 1921) * 365 + Int((curYear - 1921) / 4) + curDay + MonthAdd(curMonth - 1) - 38
Si ((curYear Mod 4) = 0 AND curMonth > 2) Entonces
LaFecha = LaFecha + 1
Terminar si
'Calcular los tallos celestes, ramas terrestres, meses y días del calendario lunar
esFin = 0
metro = 0
'------------------------------------------------------
Hacer
Si (NongliData(m) < 4095) Entonces
k=11
Demás
k = 12
terminar si
norte = k
'------------------------------------------------------
Hacer
Si (n < 0) entonces
Salir Hacer
Terminar si
'Obtiene el valor del enésimo dígito binario de NongliData(m)
bit = NongliData(m)
Para i = 1 To n Paso 1
bit = Int(bit/2)
Próximo
bit = bit Mod 2
Si (TheDate <= 29 + bit) Entonces
esFin = 1
Salir Hacer
Terminar si
LaFecha = LaFecha - 29 - bits
n=n-1
Bucle
'------------------------------------------------------
Si (isEnd = 1) Entonces
Salir Hacer
Terminar si
metro = metro + 1
Bucle
'------------------------------------------------------
curAño = 1921 + m
curMes = k - n + 1
curDay = LaFecha
Si (k = 12) entonces
Si (curMonth = (Int(NongliData(m) / 65536) + 1)) Entonces
mescur = 1 - mescur
ElseIf (curMonth > (Int(NongliData(m) / 65536) + 1)) Entonces
mescur = mescur - 1
terminar si
Terminar si
'Generar calendario lunar tallos celestes y ramas terrestres ==> sChinaYear
sChinaYear = "Calendario Lunar"&arrTianGan(((curYear - 4) Mod 60) Mod 10)&arrDiZhi(((curYear - 4) Mod 60) Mod 12)&"Año"
'Generar zodíaco == > sChinaAni
sChinaAni = arrShuXiang(((curYear - 4) Mod 60) Mod 12)
'Generar mes y día lunar ==> NongliDayStr
Si (curMonth < 1) Entonces
sChinaDay = "Salto"&arrMonName(-1 * curMonth)
Demás
sChinaDay = arrMonName(curMonth)
Terminar si
sChinaDay = sChinaDay&"mes"
sChinaDay = sChinaDay & arrDayName(curDay)
Función final
Fin de clase
%>