| Новости | 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]}
}
}
}Если эта реализация никуда не годится - кидайте в меня свои ругательства :)