countdayweek

countdayweek
 avatar
unknown
javascript
a month ago
6.9 kB
1
Indexable
<!DOCTYPE html>
<html lang="ru">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>День недели для заданного числа каждого месяца</title>
    <style>
        .day-of-week {
            color: red; /* Задаем красный цвет для дня недели */
        }
        .count-circle {
            display: inline-block;
            width: 30px; /* Ширина круга */
            height: 30px; /* Высота круга */
            border: 2px solid red; /* Обводка круга красного цвета */
            border-radius: 25%; /* Закругление углов для круга */
            text-align: center; /* Центрирование текста */
            line-height: 25px; /* Вертикальное центрирование текста */
            font-size: 125%; /* Увеличение размера шрифта на 25% */
        }
        .result-item {
            margin-bottom: 5px; /* Отступ между элементами списка */
        }
    </style>
</head>
<body>
    <h1>День недели для заданного числа каждого месяца</h1>
    <input type="number" id="yearInput" placeholder="Введите год" />
    <input type="number" id="dayInput" placeholder="Введите число (1-31)" min="1" max="31" />
    <button onclick="calculateDays()">Рассчитать</button>
    <ul id="resultList"></ul>

    <script>
        function calculateDays() {
            const year = parseInt(document.getElementById('yearInput').value);
            const day = parseInt(document.getElementById('dayInput').value);
            const resultList = document.getElementById('resultList');
            resultList.innerHTML = ''; // Очистить предыдущие результаты

            const months = [
                'Январь', 'Февраль', 'Март', 'Апрель', 'Май', 'Июнь',
                'Июль', 'Август', 'Сентябрь', 'Октябрь', 'Ноябрь', 'Декабрь'
            ];

            const daysOfWeek = [
                'Понедельник', 'Вторник', 'Среда', 'Четверг', 'Пятница', 'Суббота', 'Воскресенье'
            ];

            // Объект для подсчета дней недели
            const weekCount = {
                'Понедельник': 0,
                'Вторник': 0,
                'Среда': 0,
                'Четверг': 0,
                'Пятница': 0,
                'Суббота': 0,
                'Воскресенье': 0
            };

            for (let month = 0; month < 12; month++) {
                // Получаем количество дней в текущем месяце
                const daysInMonth = new Date(year, month + 1, 0).getDate();

                // Проверяем, существует ли введенное число в текущем месяце
                if (day > daysInMonth) {
                    const listItem = document.createElement('li');
                    listItem.className = 'result-item';
                    listItem.textContent = `${months[month]} ${year}: Дата ${day} не существует`;
                    resultList.appendChild(listItem);
                    continue; // Переходим к следующему месяцу
                }

                const date = new Date(year, month, day); // Заданное число месяца
                const dayOfWeek = (date.getDay() + 6) % 7; // Преобразование: воскресенье (0) становится 6
                const monthName = months[month];

                // Вычисление номера дня в году
                const startOfYear = new Date(year, 0, 1); // 1 января
                const dayOfYear = Math.floor((date - startOfYear) / (1000 * 60 * 60 * 24)) + 1;

                const listItem = document.createElement('li');
                listItem.className = 'result-item';
                listItem.innerHTML = `${day} ${monthName} ${year}: <span class="day-of-week">${daysOfWeek[dayOfWeek]}</span>, день в году: ${dayOfYear}`;
                resultList.appendChild(listItem);

                // Увеличиваем счетчик для соответствующего дня недели
                weekCount[daysOfWeek[dayOfWeek]]++;
            }

                       // Выводим количество дней недели в новом формате
            const countList = document.createElement('ul'); // Создаем новый список для вывода количества дней
            for (const [dayName, count] of Object.entries(weekCount)) {
                // Форматируем вывод с правильным склонением
                let dayNameGenitive;
                switch (dayName) {
                    case 'Понедельник':
                        dayNameGenitive = 'Понедельника';
                        break;
                    case 'Вторник':
                        dayNameGenitive = 'Вторника';
                        break;
                    case 'Среда':
                        dayNameGenitive = 'Среды';
                        break;
                    case 'Четверг':
                        dayNameGenitive = 'Четверга';
                        break;
                    case 'Пятница':
                        dayNameGenitive = 'Пятницы';
                        break;
                    case 'Суббота':
                        dayNameGenitive = 'Субботы';
                        break;
                    case 'Воскресенье':
                        dayNameGenitive = 'Воскресенья';
                        break;
                    default:
                        dayNameGenitive = dayName; // На всякий случай
                }

                const countItem = document.createElement('li');
                countItem.innerHTML = `${dayNameGenitive} — <span class="count-circle">${count}</span>`;
                countList.appendChild(countItem);
            }

            // Добавляем список с количеством дней к результатам
            const countHeader = document.createElement('li');
            countHeader.textContent = 'Количество дней:';
            resultList.appendChild(countHeader);
            resultList.appendChild(countList);
        }
    </script>
</body>
</html>

Leave a Comment