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