fork download
  1. <?php
  2.  
  3. function getAstroSign($input) {
  4. $astroSignToStartDate = [
  5. ['Водолей', '21 Jan'],
  6. ['Рыбы', '20 Feb'],
  7. ['Овен', '21 Mar'],
  8. ['Телец', '21 Apr'],
  9. ['Близнецы', '22 May'],
  10. ['Рак', '22 June'],
  11. ['Лев', '23 July'],
  12. ['Дева', '22 Aug'],
  13. ['Весы', '24 Sept'],
  14. ['Скорпион', '24 Oct'],
  15. ['Стрелец', '23 Nov'],
  16. ['Козерог', '23 Dec'],
  17. ];
  18.  
  19. $inputDateTime = new DateTime($input);
  20. $year = $inputDateTime->format('Y');
  21.  
  22. // Проходимся по всем элементам, кроме последнего (его проверять не нужно)
  23. for ($i = 0; $i < count($astroSignToStartDate) - 1; $i++) {
  24. $from = new DateTime($astroSignToStartDate[$i][1] . $year);
  25. $to = new DateTime($astroSignToStartDate[$i + 1][1] . $year);
  26.  
  27. if ($inputDateTime < $to && $inputDateTime >= $from) {
  28. // Возвращаем знак зодиака
  29. return $astroSignToStartDate[$i][0];
  30. }
  31. }
  32.  
  33. // Возвращаем "Козерог"
  34. return end($astroSignToStartDate)[0];
  35. }
  36.  
  37. $testcases = [
  38. ['1999-01-01', 'Козерог'],
  39. ['1999-01-20', 'Козерог'],
  40. ['1999-01-21', 'Водолей'],
  41. ['1999-01-22', 'Водолей'],
  42. ['1999-11-11', 'Скорпион'],
  43. ['1999-06-25', 'Рак'],
  44. ['1999-06-22', 'Рак'],
  45. ['1999-12-23', 'Козерог'],
  46. ['1999-12-25', 'Козерог'],
  47. ['1999-12-31', 'Козерог'],
  48. ];
  49.  
  50. foreach ($testcases as list($input, $expected)) {
  51. var_dump('Дата рождения '. $input .' ожидается : ' . $expected . ', дано: ' . getAstroSign($input));
  52. }
  53.  
Success #stdin #stdout 0.02s 52488KB
stdin
Standard input is empty
stdout
string(98) "Дата рождения 1999-01-01 ожидается : Козерог, дано: Козерог"
string(98) "Дата рождения 1999-01-20 ожидается : Козерог, дано: Козерог"
string(98) "Дата рождения 1999-01-21 ожидается : Водолей, дано: Водолей"
string(98) "Дата рождения 1999-01-22 ожидается : Водолей, дано: Водолей"
string(102) "Дата рождения 1999-11-11 ожидается : Скорпион, дано: Скорпион"
string(82) "Дата рождения 1999-06-25 ожидается : Рак, дано: Рак"
string(82) "Дата рождения 1999-06-22 ожидается : Рак, дано: Рак"
string(98) "Дата рождения 1999-12-23 ожидается : Козерог, дано: Козерог"
string(98) "Дата рождения 1999-12-25 ожидается : Козерог, дано: Козерог"
string(98) "Дата рождения 1999-12-31 ожидается : Козерог, дано: Козерог"