Новости | FAQ | Авторы | Документация | В действии | Библиотека |
Инструменты | Полезные ссылки | Хостинги | Скачать | Примеры | Форум |
Den Kulikoff 16.03.2005 16:10
Как-то потребовался метод для определения знака зодиака по дню и месяцу рождения.############ # Метод @zodiac[date;land] # По месяцу и дню рождения определяет знак зодиака. # date - дата рождения в формате mm-dd # lang - язык названия знака (en - английский, по умочанию - русский) если указать id, то вернет порядковый номер знака (1-12) # в методе при создании дат год (2000) выбран произвольно ############ @zodiac[date;lang][periods;birth_date;bdate;edate] # Таблица соответствия периодов названиям знаков зодиака $periods[^table::create{id begin end ru_name en_name 1 03-21 04-20 Овен Aries 2 04-21 05-20 Телец Taurus 3 05-21 06-21 Близнецы Gemini 4 06-22 07-22 Рак Cancer 5 07-23 08-23 Лев Leo 6 08-24 09-23 Дева Virgo 7 09-24 10-23 Весы Libra 8 10-24 11-22 Скорпион Scorpio 9 11-23 12-21 Стрелец Sagittarius 10 12-22 01-20 Козерог Carpicorn 11 01-21 02-20 Водолей Aquarius 12 02-21 03-20 Рыбы Pisces}] ^try{ $birth_date[^date::create[2000-$date]] }{ ^throw[parser.runtime;zodiac;'$date' is invalid date. Date format is %mm-%dd] } ^periods.menu{ $bdate[^date::create[2000-$periods.begin]] # Т.к. у козерога начало периода в одном году, а окончание в другом, то при создании даты для него делаем не 2000 год, а 2001 $edate[^date::create[^if($periods.id==10){2001}{2000}-$periods.end]] ^if($birth_date >= $bdate && $birth_date <= $edate){ ^switch[$lang]{ ^case[id]{$result[$periods.id]} ^case[en]{$result[$periods.en_name]} ^case[DEFAULT]{$result[$periods.ru_name]} } } }Если эта реализация никуда не годится - кидайте в меня свои ругательства :)