<?php
function getAstroSign($input) {
$astroSignToStartDate = [
['Водолей', '21 Jan'],
['Рыбы', '20 Feb'],
['Овен', '21 Mar'],
['Телец', '21 Apr'],
['Близнецы', '22 May'],
['Рак', '22 June'],
['Лев', '23 July'],
['Дева', '22 Aug'],
['Весы', '24 Sept'],
['Скорпион', '24 Oct'],
['Стрелец', '23 Nov'],
['Козерог', '23 Dec'],
];
$inputDateTime = new DateTime($input);
$year = $inputDateTime->format('Y');
// Проходимся по всем элементам, кроме последнего (его проверять не нужно)
for ($i = 0; $i < count($astroSignToStartDate) - 1; $i++) { $from = new DateTime($astroSignToStartDate[$i][1] . $year);
$to = new DateTime($astroSignToStartDate[$i + 1][1] . $year);
if ($inputDateTime < $to && $inputDateTime >= $from) {
// Возвращаем знак зодиака
return $astroSignToStartDate[$i][0];
}
}
// Возвращаем "Козерог"
return end($astroSignToStartDate)[0]; }
$testcases = [
['1999-01-01', 'Козерог'],
['1999-01-20', 'Козерог'],
['1999-01-21', 'Водолей'],
['1999-01-22', 'Водолей'],
['1999-11-11', 'Скорпион'],
['1999-06-25', 'Рак'],
['1999-06-22', 'Рак'],
['1999-12-23', 'Козерог'],
['1999-12-25', 'Козерог'],
['1999-12-31', 'Козерог'],
];
foreach ($testcases as list($input, $expected)) { var_dump('Дата рождения '. $input .' ожидается : ' . $expected . ', дано: ' . getAstroSign
($input)); }
PD9waHAKCmZ1bmN0aW9uIGdldEFzdHJvU2lnbigkaW5wdXQpIHsKICAgICRhc3Ryb1NpZ25Ub1N0YXJ0RGF0ZSA9IFsKICAgICAgICBbJ9CS0L7QtNC+0LvQtdC5JywgJzIxIEphbiddLAogICAgICAgIFsn0KDRi9Cx0YsnLCAnMjAgRmViJ10sCiAgICAgICAgWyfQntCy0LXQvScsICcyMSBNYXInXSwKICAgICAgICBbJ9Ci0LXQu9C10YYnLCAnMjEgQXByJ10sCiAgICAgICAgWyfQkdC70LjQt9C90LXRhtGLJywgJzIyIE1heSddLAogICAgICAgIFsn0KDQsNC6JywgJzIyIEp1bmUnXSwKICAgICAgICBbJ9Cb0LXQsicsICcyMyBKdWx5J10sCiAgICAgICAgWyfQlNC10LLQsCcsICcyMiBBdWcnXSwKICAgICAgICBbJ9CS0LXRgdGLJywgJzI0IFNlcHQnXSwKICAgICAgICBbJ9Ch0LrQvtGA0L/QuNC+0L0nLCAnMjQgT2N0J10sCiAgICAgICAgWyfQodGC0YDQtdC70LXRhicsICcyMyBOb3YnXSwKICAgICAgICBbJ9Ca0L7Qt9C10YDQvtCzJywgJzIzIERlYyddLAogICAgXTsKCiAgICAkaW5wdXREYXRlVGltZSA9IG5ldyBEYXRlVGltZSgkaW5wdXQpOwogICAgJHllYXIgPSAkaW5wdXREYXRlVGltZS0+Zm9ybWF0KCdZJyk7CgogICAgLy8g0J/RgNC+0YXQvtC00LjQvNGB0Y8g0L/QviDQstGB0LXQvCDRjdC70LXQvNC10L3RgtCw0LwsINC60YDQvtC80LUg0L/QvtGB0LvQtdC00L3QtdCz0L4gKNC10LPQviDQv9GA0L7QstC10YDRj9GC0Ywg0L3QtSDQvdGD0LbQvdC+KQogICAgZm9yICgkaSA9IDA7ICRpIDwgY291bnQoJGFzdHJvU2lnblRvU3RhcnREYXRlKSAtIDE7ICRpKyspIHsKICAgICAgICAkZnJvbSA9IG5ldyBEYXRlVGltZSgkYXN0cm9TaWduVG9TdGFydERhdGVbJGldWzFdIC4gJHllYXIpOwogICAgICAgICR0byAgID0gbmV3IERhdGVUaW1lKCRhc3Ryb1NpZ25Ub1N0YXJ0RGF0ZVskaSArIDFdWzFdIC4gJHllYXIpOwoKICAgICAgICBpZiAoJGlucHV0RGF0ZVRpbWUgPCAkdG8gJiYgJGlucHV0RGF0ZVRpbWUgPj0gJGZyb20pIHsKICAgICAgICAgICAgLy8g0JLQvtC30LLRgNCw0YnQsNC10Lwg0LfQvdCw0Log0LfQvtC00LjQsNC60LAKICAgICAgICAgICAgcmV0dXJuICRhc3Ryb1NpZ25Ub1N0YXJ0RGF0ZVskaV1bMF07CiAgICAgICAgfQogICAgfQoKICAgIC8vINCS0L7Qt9Cy0YDQsNGJ0LDQtdC8ICLQmtC+0LfQtdGA0L7QsyIKICAgIHJldHVybiBlbmQoJGFzdHJvU2lnblRvU3RhcnREYXRlKVswXTsKfQoKJHRlc3RjYXNlcyA9IFsKCVsnMTk5OS0wMS0wMScsICfQmtC+0LfQtdGA0L7QsyddLAoJWycxOTk5LTAxLTIwJywgJ9Ca0L7Qt9C10YDQvtCzJ10sCglbJzE5OTktMDEtMjEnLCAn0JLQvtC00L7Qu9C10LknXSwKCVsnMTk5OS0wMS0yMicsICfQktC+0LTQvtC70LXQuSddLAoJWycxOTk5LTExLTExJywgJ9Ch0LrQvtGA0L/QuNC+0L0nXSwKCVsnMTk5OS0wNi0yNScsICfQoNCw0LonXSwKCVsnMTk5OS0wNi0yMicsICfQoNCw0LonXSwKCVsnMTk5OS0xMi0yMycsICfQmtC+0LfQtdGA0L7QsyddLAoJWycxOTk5LTEyLTI1JywgJ9Ca0L7Qt9C10YDQvtCzJ10sCglbJzE5OTktMTItMzEnLCAn0JrQvtC30LXRgNC+0LMnXSwKXTsKCmZvcmVhY2ggKCR0ZXN0Y2FzZXMgYXMgbGlzdCgkaW5wdXQsICRleHBlY3RlZCkpIHsKICAgIHZhcl9kdW1wKCfQlNCw0YLQsCDRgNC+0LbQtNC10L3QuNGPICcuICRpbnB1dCAuJyDQvtC20LjQtNCw0LXRgtGB0Y8gOiAnIC4gJGV4cGVjdGVkIC4gJywg0LTQsNC90L46ICcgLiBnZXRBc3Ryb1NpZ24oJGlucHV0KSk7Cn0K