Забыл указать массиву начинать индекс с 1, должно быть так:
$signsstart = [1=>21, 20, 20, 20, 20, 20, 21, 22, 23, 23, 23, 23];
Если при этом все равно будет неверное определение, то данный подход некорректный. Ошибка значит в датах $signsstart или смещениях.
Я не астролог, понятия не имею какой знак у кого и на каком основании, и до сей поры меня это и не интересовало. Попадалось, что определение его с точностью сложнее, чем данное представление. В сети же много решений этой задачи, включая и на РНР, посмотрите другое, может что-то более корректное есть.
Ну а не получится, посмотрю, что вообще означает 21, 20, 20, 20, 20..., но позже.