Нахождение последнего дня месяца в JavaScript

Пусть перед нами стоит задача узнать последний день какого-либо месяца. Самым простым решением будет составить массив, ключами которого будут номера месяцев, а значениями - соответствующее количество дней:

let lastDays = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];

Узнаем с помощью этого массива, к примеру, количество дней в январе:

let lastDays = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]; let month = 0; // январь - нулевой месяц console.log(lastDays[0]);

Оформим наш код в виде функции:

function getLastDay(month) { let lastDays = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]; return lastDays[month]; } console.log(getLastDay(0)); // узнаем последний день января

Однако, есть проблемка. Все портит февраль: от года в год он имеет то 28, то 29 дней. То есть февраль нужно обрабатывать особенным образом. Внесем исправление в нашу функцию:

function getLastDay(month, year) { // функция должна принимать и год let lastDays = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]; if (month != 1) { return lastDays[month]; // если не февраль } else { // определяем кол-во дней в феврале по году и месяцу } }

Обратите внимание на то, что теперь наша функция должна принимать и год. Дело в том, что для определения количества дней в феврале нам нужно знать, в каком именно годе следует определять. Если год високосный, то мы вернем 29 дней, а если обычный - то 28.

Как вы видите, я не дописал функцию до конца. Дело в том, что мы начали с простого массива, а в итоге все сильно усложнилось. В JavaScript существует способ решить эту задачу попроще. Этот способ мы сейчас и разберем.

Необязательная задача для любителей покодить: допишите код представленной функции до конца. Учтите, что високосный год - это не обязательно год, который делится на 4. Погуглите его определение.

Простое решение задачи

Используем изученную нами ранее автоматическую корректировку дат, чтобы легко решить нашу задачу. Ведь в JavaScript последний день месяца - это нулевой день следующего месяца.

Для примера определим количество дней в марте 2020 года. Для этого при создании объекта с датой укажем нулевой день апреля (он имеет номер 3, так как нумерация месяцев с нуля):

let date = new Date(2020, 3, 0); console.log(date.getDate());

Оформите этот способ решения проблемы в виде функции, которая параметрами будет принимать месяц и год и возвращать номер последнего дня этого месяца.

Определите, какой день недели будет в последнем дне пятого месяца 2025 года.

Определение високосного года

Используя изученный прием, мы можем легко определить для любого года, високосный он или нет: просто необходимо узнать, сколько дней в феврале. Для этого нам нужно взять нулевой день марта:

let date = new Date(2020, 2, 0); console.log(date.getDate()); // выведет 29, тк 2020 год - високосный

Усовершенствуем наш код так, чтобы тип года выводился текстом:

let date = new Date(2020, 2, 0); if (date.getDate() == 29) { console.log('високосный'); } else { console.log('обычный'); }

Сделайте функцию isLeap, которая параметром будет принимать год и возвращать true, если этого год високосный, и false - если нет.