Как вычислить дату (формат: 01.01.0001) по номеру дня недели (от 1 до 7)?

Как определить дату (формат: 01.01.0001), зная номер текущего дня недели (от 1 до 7)?

Например: текущая неделя - 4, дата - 12.09.2024.

Если поставить номер недели 5, то дата будет 13.09.2024.

Как это реализовать?


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

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

можно воспользоваться getDay(), который выдает дни недели 0-6 начиная с воскресенья, а затем привести к нужному вам формату 1-7

Если текущий день недели воскресенье (0), меняем его на 7, чтобы воскресенье стало последним днём недели const adjustedCurrentDayOfWeek = currentDayOfWek === 0 ? 7 : currentDayOfWek;

затем расчитать разницу между днями, чтоб вывести, новую собраную дату

function findDate() {
  //получаем введённую дату и выбранный день недели
  const dateInput = document.getElementById('dateInput').value;
  const targetDayOfWeek = parseInt(document.getElementById('dayOfWeekInput').value);

  //создаём дату из введённого значения
  const startDate = new Date(dateInput);

  //определяем день недели для введённой даты (0 - воскресенье, 6 - суббота)
  const currentDayOfWek = startDate.getDay();

  //преобразуем текущий день недели в формат (1 - понедельник, 7 - воскресенье)
  const adjustedCurrentDayOfWeek = currentDayOfWek === 0 ? 7 : currentDayOfWek;

  //рассчитываем разницу между текущим и целевым днями недели
  const dayDifference = targetDayOfWeek - adjustedCurrentDayOfWeek;

  //создаём новую дату, добавив разницу дней
  const resultDate = new Date(startDate);
  resultDate.setDate(resultDate.getDate() + dayDifference);

  //форматируем дату в строку (дд.мм.гггг)
  const formattedDate = resultDate.toLocaleDateString('ru-RU', {
    day: '2-digit',
    month: '2-digit',
    year: 'numeric'
  });

  //результат
  var resultText = (resultDate.getDate() === 13 && resultDate.getDay() === 5) ? " ? Пятница 13!" : "";
  document.getElementById('result').innerText = `Соответствующая дата: ${formattedDate} ${resultText}`;
}
<h1>календарь текущей даты, по умолчанию 12/09/2024</h1>
<input type="date" id="dateInput" value="2024-09-12"><br>

<h1>выбор дня недели, по умолчанию 5</h1>
<select id="dayOfWeekInput">
  <option value="1">1 - Понедельник</option>
  <option value="2">2 - Вторник</option>
  <option value="3">3 - Среда</option>
  <option value="4">4 - Четверг</option>
  <option value="5" selected>5 - Пятница</option>
  <option value="6">6 - Суббота</option>
  <option value="7">7 - Воскресенье</option>
</select><br>
<div style="margin-top:20px;"> Вывод результата:
  <button onclick="findDate()">Нажми кнопку, чтоб узнать дату исходя из дня недели</button>

  <h1 id="result"></h1>
</div>

→ Ссылка