Вот этот корректно считает, но опять формат вывода даты нужен не 29-04-1993, как в коде, а 29.4.1993.
<?php
function znakZodiaka($data){
$day = str_replace("-","",substr($data,5));
$zodiak = array('ot' => array('0120','0219','0321','0421','0521','0622','0723','0823','0923','1024','1123','1222','0101'),
'do' => array('0218','0320','0420','0520','0621','0722','0822','0922','1023','1122','1221','1231','0119'),
'zn' => array('Водолей','Рыбы','Овен','Телец','Близнец','Рак','Лев','Дева','Весы','Скорпион','Стрелец','Козерог','Козерог'));
$i = 0;
while (empty($znak) && ($i < 13)){
$znak = (($zodiak['ot'][$i] <= $day) && ($zodiak['do'][$i] >= $day)) ? $zodiak['zn'][$i] : null;
++$i;
} return $znak;
}
echo znakZodiaka("2010-06-18");
?>