Методы isDate и isISO8601

Метод isDate в библиотеке Validator.js предназначен для проверки, является ли переданное значение корректным объектом даты или строковым представлением даты, которое может быть интерпретировано как валидная дата в JavaScript.

Поведение метода

Основная задача заключается в определении валидности даты с учётом особенностей встроенного объекта Date в JavaScript. Метод опирается на стандартный механизм парсинга даты и проверяет, приводит ли значение к корректному временно́му значению.

Поддерживаются следующие типы входных данных:

  • объект Date
  • строка, интерпретируемая как дата
  • числовые значения (в некоторых реализациях могут приводиться к дате через timestamp)

Ключевая логика: значение считается валидным, если после преобразования в объект Date результат не является Invalid Date.

Принцип работы

Внутри используется проверка через механизм Date.parse или эквивалентное приведение:

  1. Выполняется попытка преобразования значения в дату.
  2. Проверяется, не является ли результат NaN.
  3. Проверяется корректность объекта Date.

Если хотя бы одно из условий не выполняется — значение считается невалидным.

Примеры поведения

isDate(new Date()) // true

isDate("2020-12-17T03:24:00") // true

isDate("December 17, 2020 03:24:00") // true (в зависимости от движка)

isDate("not a date") // false

isDate({}) // false

isDate(null) // false

Особенности и ограничения

  • Строки обрабатываются через встроенный парсер JavaScript, который может вести себя по-разному в разных окружениях.
  • Не гарантируется строгая проверка формата даты.
  • Допускаются «гибкие» форматы, которые могут быть интерпретированы движком как валидные.

isISO8601

Метод isISO8601 используется для проверки соответствия строки стандарту ISO 8601. Этот стандарт описывает формат представления даты и времени, широко применяемый в API, базах данных и обмене данными между системами.

Основное назначение

Метод предназначен для строгой или полустрогой валидации строкового представления даты и времени в формате ISO 8601, например:

  • YYYY-MM-DD
  • YYYY-MM-DDThh:mm:ss
  • YYYY-MM-DDThh:mm:ssZ
  • YYYY-MM-DDThh:mm:ss±hh:mm

Сигнатура

isISO8601(str, options)

Параметры

str Строка, которая проверяется на соответствие ISO 8601.

options (необязательный объект):

  • strict — включает строгую проверку формата При значении true отклоняются варианты, допускающие упрощённые записи.

  • strictSeparator — требует обязательного наличия символа T между датой и временем.

Логика проверки

Метод выполняет проверку по следующим критериям:

  1. Соответствие структуры строке формата ISO 8601.
  2. Проверка корректности числовых диапазонов (месяцы, дни, часы).
  3. Проверка разделителей (-, :, T, Z, смещения часового пояса).
  4. При включённом strict — исключение нестандартных вариаций записи.

Примеры использования

isISO8601("2020-12-17") // true

isISO8601("2020-12-17T03:24:00Z") // true

isISO8601("2020-12-17T03:24:00+02:00") // true

isISO8601("2020-12-17 03:24:00") // false

С опциями:

isISO8601("2020-12-17T032400Z", { strict: true }) // false

isISO8601("2020-12-17T03:24:00", { strictSeparator: true }) // true

Различие между isDate и isISO8601

isDate:

  • ориентирован на интерпретацию значения как даты
  • допускает множество форматов
  • зависит от реализации JavaScript-движка
  • менее строгий

isISO8601:

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

Типичные сценарии применения

  • Валидация пользовательского ввода даты в формах
  • Проверка данных API перед сохранением в базу
  • Обработка JSON-объектов с временными метками
  • Контроль корректности логов и событийных данных

Частые ошибки при использовании

  • Передача чисел или объектов в isISO8601 (ожидается строка)
  • Использование локальных форматов даты (DD.MM.YYYY), не соответствующих стандарту
  • Игнорирование часового пояса при сравнении значений
  • Ожидание строгой проверки в isDate, несмотря на её гибкость

Поведение при некорректных данных

isISO8601("") // false

isISO8601("2020-13-40") // false

isISO8601("2020-12-17T25:61:00Z") // false

isISO8601("random text") // false

Роль валидации формата времени

Использование isISO8601 обеспечивает единообразие обработки временных данных в распределённых системах, где критично отсутствие неоднозначных форматов. В отличие от свободной интерпретации даты в JavaScript, ISO 8601 задаёт жёсткие правила, исключающие вариативность представления.