Показать сообщение отдельно
  #26 (permalink)  
Старый 31.10.2021, 18:55
Аватар для Блондинка
Профессор
Отправить личное сообщение для Блондинка Посмотреть профиль Найти все сообщения от Блондинка
 
Регистрация: 24.02.2019
Сообщений: 806

народ, в году есть несколько событий (праздников) которые отмечают не конкретного числа, а в определённый день недели конкретного месяца, например третий вторник октября, или второй понедельник апреля и тд

или отсчёт может идти с конца месяца, например последняя суббота сентября, или предпоследняя пятница февраля, (в месяце ведь может быть и 4 и 5 дней недели)

Вопрос такой, как высчитывать дату в этих обоих случаях? каким именно способом определить число(дату)?

посоветовали что-то типа такого добавить...

const holiday = {
  month: 6, //месяц праздника
  day: 7, //номер дня недели
  number: -1 // номер недели — отрицательный индекс означает что счёт ведётся с конца
};
//День Военно-морского флота
function getDate(date, year) {
  const d = new Date();
  d.setFullYear(year);
  d.setMonth(holiday.month, 1);
  const firstDay =
    1 + holiday.day + (d.getDay() < holiday.day ? -d.getDay() : 7 - d.getDay());
  const days = [firstDay];
  let day = firstDay;
  while (
    new Date(year, holiday.month, (day += 7)).getMonth() == holiday.month
  ) {
    days.push(day);
  }
  const index = (holiday.number < 0 ? days.length : 0) + holiday.number;
  //return days[index];
  return new Date(year, holiday.month, days[index]).toLocaleString();
}
console.log(getDate(holiday, 2022));


народ, помогите добавить несколько подобных событий в этот скрипт...
Ответить с цитированием