Форматы дат

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

Функция isDate предназначена для проверки строк, которые могут быть интерпретированы как корректные даты. Она учитывает как стандартные ISO-представления, так и пользовательские форматы при передаче дополнительных параметров.

const validator = require('validator');

validator.isDate('2026-05-11'); // true
validator.isDate('11/05/2026'); // зависит от настроек

Особенность isDate заключается в том, что она не ограничивается одним форматом. Поведение определяется параметрами, задающими строгий режим и список допустимых форматов.

Настройка форматов в isDate

Параметр options позволяет явно задать допустимые форматы и поведение проверки.

validator.isDate('11-05-2026', {
  format: 'DD-MM-YYYY',
  strictMode: true
});

Допускается использование массива форматов:

validator.isDate('05/11/2026', {
  format: ['MM/DD/YYYY', 'DD-MM-YYYY']
});

Ключевые параметры:

  • format — строка или массив строк, определяющих допустимые шаблоны
  • strictMode — включение строгой проверки соответствия формату
  • delimiters — массив допустимых разделителей даты

Использование строгого режима исключает неоднозначные интерпретации, например, различия между месяцем и днём.

ISO 8601

Формат ISO 8601 является основным стандартом представления дат и времени в веб-разработке. Validator.js предоставляет специализированную функцию isISO8601, ориентированную на строгую проверку соответствия этому стандарту.

validator.isISO8601('2026-05-11T14:30:00Z'); // true
validator.isISO8601('2026-05-11'); // true

Поддерживаются варианты:

  • только дата: YYYY-MM-DD
  • дата и время: YYYY-MM-DDTHH:mm:ssZ
  • с часовыми поясами: +03:00, Z

Расширенные настройки позволяют ограничивать проверку только датой или учитывать временную часть:

validator.isISO8601('2026-05-11T14:30:00+05:00', {
  strict: true,
  strictSeparator: true
});

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

RFC 3339

Формат RFC 3339 является подмножеством ISO 8601 и часто применяется в сетевых протоколах и JSON API. Validator.js реализует проверку через isRFC3339.

validator.isRFC3339('2026-05-11T14:30:00Z'); // true

Особенности:

  • обязательное указание временной зоны
  • строгая структура даты и времени
  • отсутствие вариативности форматов

RFC 3339 часто используется в REST API, где требуется однозначная временная метка.

UNIX timestamp

Validator.js поддерживает проверку числовых временных меток, выраженных в секундах или миллисекундах, через isUnixTimestamp (в зависимости от версии библиотеки может быть реализована как проверка числа и диапазона).

validator.isNumeric('1715423400'); // базовая проверка

Практически UNIX timestamp используется для хранения времени в базах данных и обмена между системами без привязки к часовым поясам.

Локальные форматы дат

В реальных приложениях часто встречаются локальные форматы:

  • DD/MM/YYYY (европейский)
  • MM/DD/YYYY (американский)
  • DD-MM-YYYY
  • YYYY/MM/DD

Validator.js позволяет задавать такие форматы явно:

validator.isDate('11/05/2026', {
  format: 'DD/MM/YYYY',
  strictMode: true
});

При использовании нескольких форматов:

validator.isDate('2026/05/11', {
  format: ['YYYY/MM/DD', 'DD-MM-YYYY']
});

Строгая проверка особенно важна при обработке пользовательского ввода, где автоматическое определение формата может привести к ошибкам интерпретации.

Разделители дат

Опция delimiters управляет допустимыми символами, разделяющими части даты:

validator.isDate('11-05-2026', {
  format: 'DD MM YYYY',
  delimiters: ['-', '/', '.']
});

Поддерживаемые разделители позволяют унифицировать обработку данных из различных источников, включая формы, API и импортированные файлы.

Сравнение isDate и isISO8601

isDate и isISO8601 решают разные задачи:

  • isDate — гибкая проверка пользовательских и локальных форматов
  • isISO8601 — строгая проверка стандартизированного формата
validator.isDate('05/11/2026');        // может зависеть от локали
validator.isISO8601('2026-05-11');     // всегда строго true/false

Использование isISO8601 предпочтительно в API и системных интеграциях, где требуется предсказуемость.

Обработка времени внутри дат

ISO-форматы часто включают временную составляющую:

  • T как разделитель даты и времени
  • часы, минуты, секунды
  • миллисекунды
  • обозначение часового пояса

Validator.js проверяет корректность структуры, но не интерпретирует время как объект Date:

validator.isISO8601('2026-05-11T14:30:00.123Z');

Это важное различие: библиотека выполняет синтаксическую валидацию, но не производит календарных вычислений.

Частичные даты

Некоторые сценарии требуют проверки неполных дат, например:

  • только год: 2026
  • год и месяц: 2026-05

Validator.js не предназначен для полноценной работы с частичными датами в строгих режимах ISO, однако такие проверки могут реализовываться через кастомные регулярные выражения в сочетании с matches:

validator.matches('2026-05', /^\d{4}-\d{2}$/);

Типичные ошибки при валидации дат

На практике часто встречаются следующие проблемы:

  • путаница между форматами MM/DD/YYYY и DD/MM/YYYY
  • некорректная интерпретация строк функцией Date.parse
  • отсутствие строгого режима проверки
  • смешение локальных и ISO форматов

Validator.js минимизирует эти риски за счёт явного задания форматов и строгой проверки структуры строки.

Синхронизация с объектом Date

Хотя Validator.js не выполняет преобразование в Date, часто используется связка:

if (validator.isISO8601(input)) {
  const date = new Date(input);
}

Такой подход позволяет отделить этап валидации от этапа преобразования, снижая вероятность ошибок при обработке некорректных значений.

Практическая модель валидации дат

В реальных приложениях применяется комбинированный подход:

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

Validator.js выступает как слой первичной фильтрации, обеспечивающий структурную корректность даты перед дальнейшей обработкой системой.