Почему-то ничего не выводит, если вводишь диапазон дат для Козерога.
Потому что условие
$birthday >= (int)date('z', mktime(0, 0, 0, 12, 22, $currentYear)) && $birthday <= (int)date('z', mktime(0, 0, 0, 1, 19, $currentYear))
для даты 1991-12-22 будет выглядить так: 358 >= 356 И 358 <= 18
Можно в тупую проверить козерогов в начале года отдельно от козерогов в конце года
case ($birthday >= (int)date('z', mktime(0, 0, 0, 12, 22, $currentYear)) && $birthday <= (int)date('z', mktime(0, 0, 0, 12, 31, $currentYear))):
echo "Козероги: $horoscopes[Козероги]";
break;
case ($birthday >= (int)date('z', mktime(0, 0, 0, 1, 1, $currentYear)) && $birthday <= (int)date('z', mktime(0, 0, 0, 1, 19, $currentYear))):
echo "Козероги: $horoscopes[Козероги]";
break;
Еще можно доработать код:
function getZodiacSign($date) {
$zodiacSigns = [
['Козерог', '01-01', '01-19'],
['Водолей', '01-20', '02-18'],
['Рыбы', '02-19', '03-20'],
['Овен', '03-21', '04-19'],
['Телец', '04-20', '05-20'],
['Близнецы', '05-21', '06-20'],
['Рак', '06-21', '07-22'],
['Лев', '07-23', '08-22'],
['Дева', '08-23', '09-22'],
['Весы', '09-23', '10-22'],
['Скорпион', '10-23', '11-21'],
['Стрелец', '11-22', '12-21'],
['Козерог', '12-22', '12-31']
];
$birthDate = date('m-d', strtotime($date));
foreach ($zodiacSigns as $sign) {
// Тут 0, 1, 2 не очень хороший код, можешь улучшить его самостоятельно, для примера сойдет
if ($birthDate >= $sign[1] && $birthDate <= $sign[2]) {
return $sign[0];
}
}
return null;
}
if (isset($_GET['birthday'])) {
if ($_GET['birthday'] === '') {
echo 'Вы не выбрали дату рождения!';
} else {
$res = getZodiacSign($_GET['birthday']);
echo $horoscopes[$res] ?? "error";
}
}