В библиотеке Validator.js проверки дат занимают отдельное место, поскольку работа с временными значениями требует строгого соблюдения форматов, корректного сравнения и учёта временных зон. Методы isAfter и isBefore используются для определения относительного положения одной даты по отношению к другой.
Обе функции основаны на сравнении строковых или объектных представлений дат с учётом заданного формата. Внутри Validator.js используется нормализация входных значений и преобразование их в унифицированный формат, позволяющий корректно выполнять сравнение.
Ключевые особенности:
Метод isAfter определяет, является ли первая дата более поздней, чем вторая.
isAfter(str, date)
или расширенная версия с форматом:
isAfter(str, date, format)
true, если первая дата строго больше
второй;false, если равна или меньше;false.const validator = require('validator');
validator.isAfter('2025-05-10', '2025-05-01');
// true
validator.isAfter('2025-05-01', '2025-05-10');
// false
validator.isAfter('10/05/2025', '01/05/2025', 'DD/MM/YYYY');
// true
Метод isBefore выполняет обратную проверку: определяет, предшествует ли первая дата второй.
isBefore(str, date)
или с форматом:
isBefore(str, date, format)
Алгоритм аналогичен isAfter, но направление сравнения противоположное:
true, если первая дата раньше второй;false, если позже или равна;false.const validator = require('validator');
validator.isBefore('2025-05-01', '2025-05-10');
// true
validator.isBefore('2025-05-10', '2025-05-01');
// false
validator.isBefore('01-05-2025', '10-05-2025', 'DD-MM-YYYY');
// true
Обе функции являются зеркальными по своей логике, различаясь направлением сравнения.
| Метод | Условие результата |
|---|---|
| isAfter | первая дата позже |
| isBefore | первая дата раньше |
Validator.js не всегда явно учитывает временные зоны, поэтому:
При передаче неполных значений:
validator.isBefore('2025-05', '2025-06-01');
поведение зависит от внутреннего парсера, который может дополнять отсутствующие компоненты.
Если передана некорректная дата:
validator.isAfter('invalid-date', '2025-05-01');
результат всегда будет false, поскольку проверка не
проходит валидацию.
Оба метода часто применяются в цепочках проверки:
Пример логики:
if (validator.isAfter(endDate, startDate)) {
// корректный диапазон
}
Если второй аргумент не указан, используется текущее время системы:
validator.isBefore('2024-01-01');
эквивалентно сравнению с new Date().
validator.isAfter('2025-05-10', '2025-05-01'); // корректно
validator.isAfter('2025-05-01', '2025-05-10'); // логическая ошибка ожидания результата
validator.isBefore('01/05/2025', '10/05/2025');
без указания формата может привести к неверной интерпретации.
validator.isAfter('2025-05-01', '01-05-2025');
такие случаи требуют явного указания формата для корректной работы.
Методы isAfter и isBefore формируют базовый слой логики для любой системы, где требуется контроль временных последовательностей. Их использование обеспечивает унифицированный подход к сравнению дат без необходимости ручной реализации парсинга и преобразования временных значений.