Как узнать знак зодиака по дате рождения

Подскажите как то можно узнать знак зодиака по дате рождения, проблема в том что день рождения может поступать в трех видах: "15.12", "15.12.1998" и если день и месяц из одного числа то "1.3"
Если с датой 15.12 и 15.12.1998 можно сделать через .split, то с "1.3" этот вариант будет выдавать не то. Как это можно реализовать?


Ответы (1 шт):

Автор решения: SwaD

Для решения задачи с определением знаков зодиака по дате рождения, проанализируем ее:

Анализ показывает, что в каждом месяце действует 2 знака.
Определять их можно так: берем месяц рождения и смотрим на дату. Если она больше или равна дате смены знака, то берем "второй".

Для этого нам нужен справочник. Я сделал 2 справочника, но их можно объединить в один(по вкусу)

/*
1. Овен (21 марта - 20 апреля)
2. Телец (21 апреля - 20 мая)
3. Близнецы (21 мая - 21 июня)
4. Рак (22 июня - 22 июля)
5. Лев (23 июля - 23 августа)
6. Дева (24 августа - 23 сентября)
7. Весы (24 сентября - 23 октября)
8. Скорпион (24 октября - 22 ноября)
9. Стрелец (23 ноября - 21 декабря)
10. Козерог (22 декабря - 20 января)
11. Водолей (21 января - 19 февраля)
12. Рыбы (20 февраля - 20 марта)
 */
 // Справочник дат действия знаков
const monthChoice = {
  3:  {21: [11,0]},
  4:  {21: [0,1]},
  5:  {21: [1,2]},
  6:  {22: [2,3]},
  7:  {23: [3,4]},
  8:  {24: [4,5]},
  9:  {24: [5,6]},
  10: {24: [6,7]},
  11: {23: [7,8]},
  12: {22: [8,9]},
  1:  {21: [9,10]},
  2:  {20: [10,11]},
}
// Справочник знаков
const zodiaks = {
  0: 'Овен',
  1: 'Телец',
  2: 'Близнецы',
  3: 'Рак',
  4: 'Лев',
  5: 'Дева',
  6: 'Весы',
  7: 'Скорпион',
  8: 'Стрелец',
  9: 'Козерог',
  10: 'Водолей',
  11: 'Рыбы',
}
// Даты для проверки
const inputStrings = ['05.04', '22.6', '5.5', '12.06.1999', '12.12.2008', '12.2.98', '1.1.10', '28.02', '10.08', '21.01']

inputStrings.forEach(item => {
  // Получаем день и месяц, с преобразованием в число
  const [d,m] = item.split('.').map(i => +i);
  // Получаем справочник по номеру месяца
  const choice = monthChoice[m];
  // Получаем день начала нового знака зодиака из справочника
  const dayChange = +Object.keys(choice)[0];
  // Если день рождения больше или равен дню смены, то из справочника второй знак, иначе первый
  const res = d >= dayChange ? choice[dayChange][1] : choice[dayChange][0];
  console.log(item, zodiaks[res]);
});

→ Ссылка