Найти предыдущий високосный год

Какой код нужно написать, чтобы найти предыдущий високосный год используя конструктор Date или указывая год самому?

Пытался сделать так:

let now = new Date();
let date = new Date(now.getFullYear(), 2, 0);

for (now.getFullYear(), , year--) {
  if (date.getDate() == 29) {
    console.log("Високосный год!");
  }
}

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

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

Для того чтобы проверить сделать проверку високосный год или нет, достаточно проверить на делимость на 4

function getLastLeapYear() {
  const year = new Date().getFullYear();
  const diff = year % 4;
  return year - diff;
}

console.log(getLastLeapYear());

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

function prevLeapYear(y) {
  --y // убрать, если надо <= переданного, а не строго <
  y &= ~3
  if (y % 100 === 0 && y % 400 !== 0) y -= 4
  return y
}

var input = document.querySelector('input')
var output = document.querySelector('output')

output.textContent = prevLeapYear(input.valueAsNumber)

input.addEventListener('input', e => {
  output.textContent = e.target.validity.valid
    ? prevLeapYear(e.target.valueAsNumber)
    : "Enter valid year"
})
<input type=number value=2022 required min=1 max=10000> <output></output>

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

В вопросе явно звучит "Как дописать код..." То есть предлагается цикл for, в котором по признаку 29 дней надо выделить високосный год. Пожалуйста:

let now = new Date();                //Получаем текущую дату
let year = now.getFullYear();        //Извлекаем год (четыре знака)
const limit = year - 4; //Високосный год бывает раз в 4 года. 4 года - диапазон поиска

for(year; year > limit; --year) {//Изменяя год в пределах диапазона поиска,
    let date = new Date(year, 1, 29);//Подставляем число, присущее високосному году
    let currentMonth = date.getMonth();
    if(currentMonth == 1) { //Если номер месяца не изменился, значит это - високосный год
        console.log('Вот он, високосный год! -- ', year);
    } else {               //Если номер месяца изменился, проходим к предыдущему году...
        console.log('Фига вам, а не високосный год!');
    }
}

Используем очень полезную особенность объектов Date - автоисправление. То есть, если задан номер дня больше, чем имеется в месяце, то изменяется номер месяца и номер дня. Кстати, проверка показала, что номера месяцев начинаются с нуля.

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

в виде функции

function getPrevLeap(year) {
    while (true) {
        let date = new Date(year--, 2, 0)
        if (date.getDate() === 29){
            return date.getFullYear()
        }
    }
}

console.log(getPrevLeap(2022))

→ Ссылка
Автор решения: Константин Юдаков
let now = new Date();

for (let year = now.getFullYear(); year >= 0; year--) {
    let date = new Date(year, 2, 0);
    if (date.getDate() == 29) {
        console.log(year);
        break;
    }
}
→ Ссылка