Как узнать знак зодиака по дате рождения
Подскажите как то можно узнать знак зодиака по дате рождения, проблема в том что день рождения может поступать в трех видах: "15.12", "15.12.1998" и если день и месяц из одного числа то "1.3"
Если с датой 15.12 и 15.12.1998 можно сделать через .split
, то с "1.3" этот вариант будет выдавать не то. Как это можно реализовать?
Ответы (1 шт):
Для решения задачи с определением знаков зодиака по дате рождения, проанализируем ее:
Анализ показывает, что в каждом месяце действует 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]);
});