В библиотеке Moment.js работа с датами и временем всегда сопровождается необходимостью проверки корректности значений. Даже если строка или объект похожи на дату, это не гарантирует, что Moment сможет правильно её интерпретировать. Для таких случаев предусмотрены механизмы валидации, позволяющие безопасно использовать объекты Moment без риска некорректных вычислений.
moment().isValid()Описание: метод isValid() позволяет
определить, является ли объект Moment корректной датой. Он возвращает
булево значение true или false.
Синтаксис:
moment(input).isValid()
Примеры использования:
moment("2023-05-21").isValid(); // true
moment("2023-13-01").isValid(); // false, неверный месяц
moment("invalid-date").isValid(); // false
moment(new Date()).isValid(); // true
Особенности:
Moment.js позволяет передавать строку вместе с форматом. В этом случае проверка учитывает соответствие именно заданному формату.
Синтаксис:
moment(input, format, strict).isValid()
"YYYY-MM-DD".Примеры:
moment("21-05-2023", "DD-MM-YYYY").isValid(); // true
moment("21/05/2023", "DD-MM-YYYY").isValid(); // true (нестрогое)
moment("21/05/2023", "DD-MM-YYYY", true).isValid(); // false (строгая проверка)
Примечание: строгий режим
(strict = true) особенно полезен при парсинге данных из
внешних источников, чтобы исключить ошибки из-за неверного формата.
Иногда необходимо проверить корректность только отдельных частей даты — года, месяца или дня. Для этого Moment.js предоставляет вспомогательные функции, хотя прямого метода для отдельных компонентов нет. Однако можно создавать Moment и проверять его валидность.
let date = moment({ year: 2023, month: 4, day: 32 });
date.isValid(); // false, так как в мае нет 32 дней
Это позволяет строить гибкие проверки при генерации дат программно.
Moment.js учитывает локаль при парсинге строк с месяцами в текстовом виде. Например:
moment("21 мая 2023", "D MMMM YYYY", "ru").isValid(); // true
moment("21 May 2023", "D MMMM YYYY", "ru").isValid(); // false
null:moment("").isValid(); // false
moment(null).isValid(); // false
moment(new Date("invalid")).isValid(); // false
moment(1684665600000).isValid(); // true
moment(9999999999999999).isValid(); // false
Для приложений, где важно проверить не только корректность даты, но и
её принадлежность к определённому диапазону, можно комбинировать методы
isValid() и сравнение дат:
let date = moment("2023-05-21", "YYYY-MM-DD", true);
if (date.isValid() && date.isBetween("2023-01-01", "2023-12-31")) {
console.log("Дата корректна и в пределах 2023 года");
}
isBetween возвращает true, если дата
лежит между указанными границами (по умолчанию границы не включаются, но
можно передавать флаги для включения).Эффективная проверка валидности в Moment.js позволяет предотвратить распространённые ошибки, связанные с некорректными или неожиданными датами, и обеспечивает надёжную работу с календарными вычислениями.