Методы isAfter и isBefore

В библиотеке Validator.js проверки дат занимают отдельное место, поскольку работа с временными значениями требует строгого соблюдения форматов, корректного сравнения и учёта временных зон. Методы isAfter и isBefore используются для определения относительного положения одной даты по отношению к другой.


Общая концепция сравнения дат

Обе функции основаны на сравнении строковых или объектных представлений дат с учётом заданного формата. Внутри Validator.js используется нормализация входных значений и преобразование их в унифицированный формат, позволяющий корректно выполнять сравнение.

Ключевые особенности:

  • поддержка строковых дат;
  • возможность указания формата;
  • опциональная база сравнения;
  • строгая валидация корректности даты перед сравнением.

Метод isAfter

Назначение

Метод isAfter определяет, является ли первая дата более поздней, чем вторая.

Сигнатура

isAfter(str, date)

или расширенная версия с форматом:

isAfter(str, date, format)

Параметры

  • str — проверяемая дата (строка или объект, приводимый к дате);
  • date — дата, с которой выполняется сравнение;
  • format — необязательный параметр, определяющий формат входных данных.

Логика работы

  1. Обе даты приводятся к единому представлению.
  2. Проверяется корректность значений.
  3. Выполняется сравнение временных меток.
  4. Возвращается логический результат.

Поведение функции

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

Сигнатура

isBefore(str, date)

или с форматом:

isBefore(str, date, format)

Параметры

  • str — проверяемая дата;
  • date — дата сравнения;
  • format — опциональный формат строки даты.

Логика работы

Алгоритм аналогичен isAfter, но направление сравнения противоположное:

  1. Преобразование входных данных в единый формат;
  2. Валидация дат;
  3. Сравнение временных значений;
  4. Возврат результата.

Поведение функции

  • возвращает 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

Обе функции являются зеркальными по своей логике, различаясь направлением сравнения.

Метод Условие результата
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 формируют базовый слой логики для любой системы, где требуется контроль временных последовательностей. Их использование обеспечивает унифицированный подход к сравнению дат без необходимости ручной реализации парсинга и преобразования временных значений.