<%
'Опция явная
'*********************************************
' Имя класса: ChinaDay
'Цель:
' Рассчитать основы и ветви лунного календаря даты и знака зодиака года на основе введенной даты
'Использование:
'Первый параметр является входным. Если он не заполнен, по умолчанию используется текущий день.
'Рассчитывать даты только после 1921-2-8
' ##----------------------------------------------- -##
'Dim objChinaDay
' Dim sDay, sWeekDay, sChinaDay, sChinaYear, sChinaAni
' Устанавливаем objChinaDay = Новый ChinaDay
' Вызов objChinaDay.Action("",sDay,sWeekDay,sChinaYear,sChinaDay,sChinaAni)
' Response.Write sDay&"<BR>"
' Response.Write sWeekDay&"<BR>"
' Response.Напишите sChinaYear&"<BR>"
' Response.Напишите sChinaDay&"<BR>"
' Ответ. Напишите sChinaAni&"<BR>"
' ##----------------------------------------------- -##
' Изменить:Babyt(Artest)
Почта: [email protected]
'Добро пожаловать в:
' http://blog.csdn.net/babyt/
' http://www.facesun.cn
' Создано: 20 февраля 2005 г.
' Авторские права: Этот код не является оригинальным и был собран в 2001 году. Первоначальный автор неизвестен.
'Лицензия: Бесплатно
'********************************************** ***
КлассКитайДень
Dim arrWeekName(7), MonthAdd(11), NongliData(99)
Dim arrTianGan(9), arrDiZhi(11), arrShuXiang(11), arrDayName(30), arrMonName(12)
Тусклый curTime, curYear, curMonth, curDay, curWeekday
Dim i, m, n, k, isEnd, бит, TheDate
'Инициализируем данные
Подкласс_инициализировать()
'------------------------------------------------ - -
'Определить строку отображения
'Название недели
arrWeekName(0) = "*"
arrWeekName(1) = "Воскресенье"
arrWeekName(2) = "Понедельник"
arrWeekName(3) = "Вторник"
arrWeekName(4) = "Среда"
arrWeekName(5) = "Четверг"
arrWeekName(6) = "Пятница"
arrWeekName(7) = "Суббота"
'Небесное стволовое имя
arrTianGan(0) = "А"
arrTianGan(1) = "B"
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) = "Ра"
'------------------------------------------------ - -------
'Определение данных допуска
'Количество дней в начале каждого месяца по григорианскому календарю
МесяцДобавить(0) = 0
МесяцДобавить(1) = 31
МесяцДобавить(2) = 59
МесяцДобавить(3) = 90
МесяцДобавить(4) = 120
МесяцДобавить(5) = 151
МесяцДобавить(6) = 181
МесяцДобавить(7) = 212
МесяцДобавить(8) = 243
МесяцДобавить(9) = 273
МесяцДобавить(10) = 304
МесяцДобавить(11) = 334
'Данные лунного календаря
НонглиДанные(0) = 2635
НонглиДанные(1) = 333387
НонглиДанные(2) = 1701
НонглиДанные(3) = 1748
НонглиДанные(4) = 267701
НонглиДанные(5) = 694
НонглиДанные(6) = 2391
НонглиДанные(7) = 133423
НонглиДанные(8) = 1175
НонглиДанные(9) = 396438
НонглиДанные(10) = 3402
НонглиДанные(11) = 3749
НонглиДанные(12) = 331177
НонглиДанные(13) = 1453
НонглиДанные(14) = 694
NongliData(15) = 201326
НонглиДанные(16) = 2350
НонглиДанные(17) = 465197
НонглиДанные(18) = 3221
НонглиДанные(19) = 3402
НонглиДанные(20) = 400202
НонглиДанные(21) = 2901
НонглиДанные(22) = 1386
НонглиДанные(23) = 267611
НонглиДанные(24) = 605
НонглиДанные(25) = 2349
НонглиДанные(26) = 137515
НонглиДанные(27) = 2709
НонглиДанные(28) = 464533
НонглиДанные(29) = 1738
НонглиДанные(30) = 2901
НонглиДанные(31) = 330421
НонглиДанные(32) = 1242
НонглиДанные(33) = 2651
НонглиДанные(34) = 199255
НонглиДанные(35) = 1323
НонглиДанные(36) = 529706
НонглиДанные(37) = 3733
НонглиДанные(38) = 1706
НонглиДанные(39) = 398762
НонглиДанные(40) = 2741
НонглиДанные(41) = 1206
НонглиДанные(42) = 267438
НонглиДанные(43) = 2647
НонглиДанные(44) = 1318
НонглиДанные(45) = 204070
НонглиДанные(46) = 3477
НонглиДанные(47) = 461653
НонглиДанные(48) = 1386
НонглиДанные(49) = 2413
НонглиДанные(50) = 330077
НонглиДанные(51) = 1197
НонглиДанные(52) = 2637
NongliData(53) = 268877
НонглиДанные(54) = 3365
NongliData(55) = 531109
НонглиДанные(56) = 2900
НонглиДанные(57) = 2922
НонглиДанные(58) = 398042
НонглиДанные(59) = 2395
НонглиДанные(60) = 1179
НонглиДанные(61) = 267415
НонглиДанные(62) = 2635
НонглиДанные(63) = 661067
НонглиДанные(64) = 1701
НонглиДанные(65) = 1748
НонглиДанные(66) = 398772
НонглиДанные(67) = 2742
НонглиДанные(68) = 2391
НонглиДанные(69) = 330031
НонглиДанные(70) = 1175
НонглиДанные(71) = 1611
НонглиДанные(72) = 200010
НонглиДанные(73) = 3749
НонглиДанные(74) = 527717
НонглиДанные(75) = 1452
НонглиДанные(76) = 2742
НонглиДанные(77) = 332397
НонглиДанные(78) = 2350
НонглиДанные(79) = 3222
НонглиДанные(80) = 268949
НонглиДанные(81) = 3402
НонглиДанные(82) = 3493
НонглиДанные(83) = 133973
НонглиДанные(84) = 1386
НонглиДанные(85) = 464219
НонглиДанные(86) = 605
НонглиДанные(87) = 2349
НонглиДанные(88) = 334123
НонглиДанные(89) = 2709
НонглиДанные(90) = 2890
NongliData(91) = 267946
НонглиДанные(92) = 2773
NongliData(93) = 592565
НонглиДанные(94) = 1210
НонглиДанные(95) = 2651
НонглиДанные(96) = 395863
НонглиДанные(97) = 1323
НонглиДанные(98) = 2707
НонглиДанные(99) = 265877
Конец субтитра
'############################################### #########
'Основной метод Действие
' inDay Введите дату, если она не введена, по умолчанию используется текущая дата.
'sDay Дата в китайском формате
' sWeekDay День недели
' sChinaYear Лунный Новый год
' sChinaDay лунный день
' Знак зодиака ШинаАни
'############################################### #########
Действие публичной функции(inDay,sDay,sWeekDay,sChinaYear,sChinaDay,sChinaAni)
'Конвертируем дату, которую нужно преобразовать
Если inDay="" Или Не IsDate(inDay), Тогда
'Получить текущее системное время
curTime = Сейчас()
Еще
curTime = CDate(inDay)
Конец, если
Если Datediff("d",curTime,Cdate("1921-2-8"))>0 Тогда
Выход из функции
Конец, если
'Создаем текущий год, месяц и день по григорианскому календарю ==> sDay
CurYear = Год(curTime)
curMonth = Месяц(curTime)
curDay = День(curTime)
sDay = curYear&"год"
Если (curMonth < 10) Тогда
sDay = sDay&"0"&curMonth&"месяц"
Еще
sDay = sDay&curMonth&"месяц"
Конец, если
Если (curDay < 10) Тогда
sDay = sDay&"0"&curDay&"日"
Еще
sDay = sDay&curDay&"日"
Конец, если
'Сгенерируем текущую неделю по григорианскому календарю ==> sWeekDay
curWeekday = День недели (curTime)
sWeekDay = arrWeekName(curWeekday)
'Вычислите количество дней до начального времени 8 февраля 1921 года: 1921-2-8 (первый день первого лунного месяца)
TheDate = (curYear - 1921) * 365 + Int((curYear - 1921) / 4) + curDay + MonthAdd(curMonth - 1) - 38
Если ((curYear Mod 4) = 0 И curMonth > 2) Тогда
Дата = Дата + 1
Конец, если
'Рассчитать небесные стебли, земные ветви, месяцы и дни лунного календаря
isEnd = 0
м = 0
'---------------------------------------------
Делать
Если (NongliData(m) < 4095) Тогда
к=11
Еще
к = 12
Конец, если
п = к
'---------------------------------------------
Делать
Если (n < 0) Тогда
Выход сделать
Конец, если
'Получаем значение n-й двоичной цифры NongliData(m)
бит = NongliData(m)
Для i = 1 до n Шаг 1
бит = Int(бит/2)
Следующий
бит = бит Мод 2
Если (TheDate <= 29 + бит) Тогда
isEnd = 1
Выход сделать
Конец, если
TheDate = TheDate - 29 - бит
п=п-1
Петля
'---------------------------------------------
Если (isEnd = 1) Тогда
Выход сделать
Конец, если
м = м + 1
Петля
'---------------------------------------------
CurYear = 1921 + м
курМесяц = k - n + 1
curDay = Дата
Если (к = 12) Тогда
Если (curMonth = (Int(NongliData(m) / 65536) + 1)) Тогда
курМесяц = 1 - КурМесяц
ИначеЕсли (curMonth > (Int(NongliData(m)/65536) + 1)) Тогда
курМесяц = КурМесяц - 1
Конец, если
Конец, если
'Сгенерировать небесные стебли и земные ветви лунного календаря ==> sChinaYear
sChinaYear = "Лунный календарь"&arrTianGan(((curYear - 4) Mod 60) Mod 10)&arrDiZhi(((curYear - 4) Mod 60) Mod 12)&"Year"
'Сгенерировать зодиак == > sChinaAni
sChinaAni = arrShuXiang(((curYear - 4) Mod 60) Mod 12)
'Сгенерировать лунный месяц и день ==> NongliDayStr
Если (curMonth < 1) Тогда
sChinaDay = "Прыжок"&arrMonName(-1 * curMonth)
Еще
sChinaDay = arrMonName(curMonth)
Конец, если
sChinaDay = sChinaDay&"месяц"
sChinaDay = sChinaDay & arrDayName(curDay)
Конечная функция
Конечный класс
%>