В библиотеке Moment.js работа с датами и временем упрощена за счет удобных методов для анализа, форматирования и вычислений. Одним из часто используемых аспектов является проверка, является ли конкретный год високосным. Високосный год — это год, который содержит 366 дней вместо привычных 365. Основное правило: год делится на 4, но не делится на 100, за исключением годов, делящихся на 400.
Для начала необходимо создать объект Moment. Основные способы:
// Создание даты с текущим временем
const now = moment();
// Создание даты для конкретного года
const date = moment("2024-01-01", "YYYY-MM-DD");
// Создание даты с использованием конструктора Date
const anotherDate = moment(new Date(2024, 0, 1)); // Месяцы нумеруются с 0
Объект moment позволяет работать с датой и временем
независимо от формата исходных данных. После создания объекта можно
получать информацию о году, месяце, дне, а также выполнять вычисления и
проверки.
Moment.js предоставляет удобный метод
isLeapYear(), который возвращает
логическое значение:
const date = moment("2024-01-01");
console.log(date.isLeapYear()); // true
isLeapYear() проверяет только
год, к которому привязан объект moment.true, если год високосный, и
false в противном случае.Метод работает корректно для любого года в григорианском календаре, включая отрицательные годы (до нашей эры) и будущие даты.
Для проверки текущего года достаточно создать объект с текущей датой:
const currentYear = moment();
if (currentYear.isLeapYear()) {
console.log(`Год ${currentYear.year()} является високосным`);
} else {
console.log(`Год ${currentYear.year()} не является високосным`);
}
year() возвращает числовое значение года объекта
moment.isLeapYear() позволяет выполнять условные вычисления на
лету, например, корректировку количества дней в феврале.Можно проверить високосность года, не создавая конкретную дату, используя временные объекты с заданным годом:
function checkLeapYear(year) {
return moment([year]).isLeapYear();
}
console.log(checkLeapYear(2000)); // true
console.log(checkLeapYear(1900)); // false
console.log(checkLeapYear(2023)); // false
moment([year]) создаёт объект даты с 1
января указанного года.Високосный год напрямую влияет на операции с датами:
const leapYear = moment("2024-02-28");
leapYear.add(1, 'days');
console.log(leapYear.format("YYYY-MM-DD")); // 2024-02-29
const nonLeapYear = moment("2023-02-28");
nonLeapYear.add(1, 'days');
console.log(nonLeapYear.format("YYYY-MM-DD")); // 2023-03-01
add() учитывает количество дней в месяце и
корректно переносит дату.isLeapYear() помогает прогнозировать поведение
вычислений и корректно обрабатывать февраль.Moment.js позволяет фильтровать массив дат по високосности:
const years = [1999, 2000, 2001, 2004, 2100];
const leapYears = years.filter(y => moment([y]).isLeapYear());
console.log(leapYears); // [2000, 2004]
map,
filter и reduce.isLeapYear() для любых проверок
года, чтобы избежать ручного вычисления и ошибок.Использование Moment.js для определения високосного года делает код чистым, предсказуемым и легко читаемым, избавляя от необходимости вручную реализовывать алгоритмы деления на 4, 100 и 400.