Получить массив дат выходных дней года
В коде ниже я получил массив дат выходных для текущего месяца. Под конец учебного дня я, видимо, совсем не вывожу, т.к как не могу понять как получить все даты выходных за год)
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
}