Знаки Зодиака

duba

Новичок
Знаки Зодиака

Господа, может у кого нибудь есть функция уже написанная, которая по дате возвращает знак зодиака ?

Если нетрудно запостите, я тут одну нашол но она нехочет работать !
 

neko

tеam neko
duba

ты тут где-нибудь видел надпись "клуб любителей астрологии"? нет, не видел?

это потому что ее тут нет
 

duba

Новичок
Что то типа такого получилось :))))


function ZODIAC($date){

$zar = array (-1, 19, 49, 80, 111, 141, 172, 204, 235, 267, 297, 326, 356, 366);
$zar_ru = array ("Козерог","Водолей","Рыбы", "Овен", "Телец", "Близнецы", "Рак", "Лев", "Дева", "Весы", "Скорпион", "Стрелец", "Козерог", "Козерог");

$date=explode("-",$date);
$stamp=mktime(0,0,0,$date[1],$date[2],$date[1]);
$offset=date("z",$stamp);

echo "$offset<br>";

for ($n=0; $n<sizeof($zar); $n++){
if ($offset>=$zar[$n] and $offset<$zar[$n+1]) return $zar_ru[$n];
}
}

echo ZODIAC("2004-1-20");
 

Romantik

TeaM PHPClub
duba
ну и что в ней не так?

-~{}~ 01.08.04 01:28:

$stamp=mktime(0,0,0,$date[1],$date[2],$date[1]);
ИМХО год это $date[0]
 

duba

Новичок
Всё вроде так :) Работает :) Оставлю пост , мож пригодиться :)
 

neko

tеam neko
во первых диапазоны знаков это дни в месяце
а не относительно начала года

а во-вторых год вообще роли не играет
 

Romantik

TeaM PHPClub
neko
Я конечно в эту лабуду не играю, но имхо
диапазоны правильные, а год нужен для преобразования
хотя ты прав- изврат не нужный
 

neko

tеam neko
200 день это разные дни в разные года
где там преобразование
 

neko

tеam neko
ну и что получается мы в $offset кладем какой это был день в том году, который передали параметром.

в этом конкретном году это 200ый день

а в каком-нибудь другом году это был 199ый

или я что-то упустил?
 

duba

Новичок
Эх... так что бы нам такое придумать что бы все было бы правильно ?!
 

Romantik

TeaM PHPClub
duba
тебе же дали совет еще в начале.
В твоем же скрипте можно извратиться с параметром date "L" отвечающий за высокосный год
 

neko

tеam neko
duba
главное это хранить диапазоны не так как тебе вздумалось, а так как они есть в реальности

если сказано что с 21 окт по 22 ноября, то так и храни
 

Rin

*
Вариант для mySQL, возможно не самый лучший

[sql]
SELECT dob, @zodiac_number := CASE
WHEN dob IS NULL THEN NULL
WHEN TO_DAYS(dob) >= TO_DAYS(CONCAT(YEAR(dob), "-03-21")) AND
TO_DAYS(dob) <= TO_DAYS(CONCAT(YEAR(dob), "-04-20")) THEN 1
WHEN TO_DAYS(dob) >= TO_DAYS(CONCAT(YEAR(dob), "-04-21")) AND
TO_DAYS(dob) <= TO_DAYS(CONCAT(YEAR(dob), "-05-21")) THEN 2
WHEN TO_DAYS(dob) >= TO_DAYS(CONCAT(YEAR(dob), "-05-22")) AND
TO_DAYS(dob) <= TO_DAYS(CONCAT(YEAR(dob), "-06-21")) THEN 3
WHEN TO_DAYS(dob) >= TO_DAYS(CONCAT(YEAR(dob), "-06-22")) AND
TO_DAYS(dob) <= TO_DAYS(CONCAT(YEAR(dob), "-07-23")) THEN 4
WHEN TO_DAYS(dob) >= TO_DAYS(CONCAT(YEAR(dob), "-07-24")) AND
TO_DAYS(dob) <= TO_DAYS(CONCAT(YEAR(dob), "-08-23")) THEN 5
WHEN TO_DAYS(dob) >= TO_DAYS(CONCAT(YEAR(dob), "-08-24")) AND
TO_DAYS(dob) <= TO_DAYS(CONCAT(YEAR(dob), "-09-23")) THEN 6
WHEN TO_DAYS(dob) >= TO_DAYS(CONCAT(YEAR(dob), "-09-24")) AND
TO_DAYS(dob) <= TO_DAYS(CONCAT(YEAR(dob), "-10-23")) THEN 7
WHEN TO_DAYS(dob) >= TO_DAYS(CONCAT(YEAR(dob), "-10-24")) AND
TO_DAYS(dob) <= TO_DAYS(CONCAT(YEAR(dob), "-11-22")) THEN 8
WHEN TO_DAYS(dob) >= TO_DAYS(CONCAT(YEAR(dob), "-11-23")) AND
TO_DAYS(dob) <= TO_DAYS(CONCAT(YEAR(dob), "-12-21")) THEN 9
WHEN TO_DAYS(dob) >= TO_DAYS(CONCAT(YEAR(dob), "-12-22")) OR
TO_DAYS(dob) <= TO_DAYS(CONCAT(YEAR(dob), "-01-20")) THEN 10
WHEN TO_DAYS(dob) >= TO_DAYS(CONCAT(YEAR(dob), "-01-21")) AND
TO_DAYS(dob) <= TO_DAYS(CONCAT(YEAR(dob), "-02-19")) THEN 11
WHEN TO_DAYS(dob) >= TO_DAYS(CONCAT(YEAR(dob), "-02-20")) AND
TO_DAYS(dob) <= TO_DAYS(CONCAT(YEAR(dob), "-03-20")) THEN 12
END AS zodiac_number,
ELT (@zodiac_number, "овен", "телец", "близнецы", "рак", "лев", "дева", "весы", "скорпион", "стрелец", "козерог", "водолей", "рыбы") AS zodiac_sign
FROM `users`
[/sql]
 
Сверху