Получить массив дат выходных дней года

В коде ниже я получил массив дат выходных для текущего месяца. Под конец учебного дня я, видимо, совсем не вывожу, т.к как не могу понять как получить все даты выходных за год)

let weekEnd = [],
  d = new Date(),
  m = d.getMonth(),
  y = d.getFullYear(),
  totalDays = new Date(y, m, 6).getDate() && new Date(y, m, 0).getDate();

for (let i = 1; i <= totalDays; i++) {
  let dayNum = new Date(y, m, i).getDay();
  // console.log("dayNum", dayNum);
  if (dayNum === 6) weekEnd.push(i);
  else if (dayNum === 0) weekEnd.push(i);
}

console.log(weekEnd)


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

Автор решения: Alexander Lonberg

const targetYear = 2024

const msDay = 24 * 60 * 60 * 1000
const msWeek = 7 * msDay
const datetime = new Date(targetYear, 0)

// Первое воскресенье
let firstSunday = datetime.getDay() === 0
  ? datetime.getTime()
  : datetime.setTime(datetime.getTime() + (msDay * (7 - datetime.getDay())))

const sundays = []
do {
  sundays.push(datetime.toDateString())
  firstSunday += msWeek // Прибавляем по неделе
  datetime.setTime(firstSunday)
} while (targetYear === datetime.getFullYear())

console.log(sundays)

→ Ссылка
Автор решения: ksa

не могу понять как получить все даты выходных за год

Вычисли первый выходной - далее все в цикле...

console.log(test(2024))
//
function test(y) {
  const a = []
  const d = new Date(y, 0, 1)
  const t = d.getDay()
  if (t === 0) a.push(d)
  if (t < 6) d.setDate(d.getDate() + (7 - t))
  while (d.getFullYear() === y) {
    a.push(d.toISOString().split('T')[0])
    d.setDate(d.getDate() + 1)
    a.push(d.toISOString().split('T')[0])
    d.setDate(d.getDate() + 6)
  }
  return a
}

→ Ссылка