В библиотеке Validator.js метод toDate используется для
преобразования входного значения в объект Date JavaScript.
Основная задача метода — привести строковое или числовое представление
даты к стандартному объекту времени, с которым можно работать через
встроенные средства языка.
Метод относится к группе преобразующих утилит и часто используется в связке с валидацией, когда входные данные поступают в виде строки, но в бизнес-логике требуется именно объект даты.
validator.toDate(input)
Параметры:
input — значение, которое требуется преобразовать.
Обычно строка, число или объект, приводимый к дате через
Date.Возвращаемое значение:
Date — валидный объект даты при успешном
преобразованииnull — если преобразование невозможно или результат
некорректенМетод использует внутренние механизмы JavaScript для парсинга даты. Фактически происходит попытка создания объекта:
new Date(input)
После этого выполняется проверка на валидность результата. Если дата
некорректна (например, Invalid Date), метод возвращает
null.
Поведение метода зависит от того, какие форматы способен интерпретировать движок JavaScript. На практике чаще всего корректно обрабатываются:
validator.toDate('2024-01-15T10:30:00Z')
Результат: корректный объект Date в UTC.
validator.toDate('2024-01-15')
В большинстве сред интерпретируется как UTC или локальное время в зависимости от движка.
validator.toDate('Mon, 15 Jan 2024 10:30:00 GMT')
Поддерживается стандартным парсером JavaScript.
validator.toDate(1705312200000)
Числовое значение воспринимается как миллисекунды с начала эпохи Unix.
import validator from 'validator';
const result = validator.toDate('2024-01-15T10:30:00Z');
console.log(result instanceof Date); // true
const result = validator.toDate('not-a-date');
console.log(result); // null
const result = validator.toDate(1609459200000);
console.log(result.toISOString()); // 2021-01-01T00:00:00.000Z
После создания объекта Date выполняется проверка:
isNaN(date.getTime()) возвращает
true, результат считается некорректнымnullМетод не реализует собственный парсер дат. Он полностью полагается на
встроенный Date JavaScript, что приводит к следующим
особенностям:
const birthDate = validator.toDate(req.body.birthDate);
Используется перед сохранением данных в базу, где требуется тип
Date.
const normalized = {
createdAt: validator.toDate(apiResponse.createdAt),
};
const start = validator.toDate(startInput);
const end = validator.toDate(endInput);
if (start && end && start < end) {
// логика обработки периода
}
validator.toDate('01/02/2024');
Формат зависит от локали среды выполнения:
При парсинге строк без указания зоны возможна конвертация в локальное время:
validator.toDate('2024-01-15 10:30:00');
Результат может отличаться в зависимости от сервера.
validator.toDate('2024-02-30');
Такое значение будет преобразовано в null, так как дата
не существует.
Без toDate:
const date = new Date(input);
const isValid = !isNaN(date.getTime());
С использованием toDate:
const date = validator.toDate(input);
Метод объединяет создание и проверку в одну операцию, снижая вероятность ошибок.
| Вход | Результат |
|---|---|
| ISO строка | Date |
| timestamp (number) | Date |
| некорректная строка | null |
| пустая строка | null |
undefined |
null |
Метод часто применяется вместе с проверками:
isISO8601 — предварительная валидация строкиisDate — проверка валидности датыtoString (внутренние преобразования)Пример комбинированного использования:
if (validator.isISO8601(input)) {
const date = validator.toDate(input);
}
Метод является лёгкой обёрткой над стандартным Date. Его
выполнение практически не добавляет накладных расходов, так как:
Это делает его подходящим для массовой обработки данных, включая потоковую валидацию запросов.
const date = validator.toDate(input);
console.log(date.getTime()); // ошибка, если null
Метод не ограничивает входной формат, что часто приводит к неоднозначности в системах с разными источниками данных.
При работе с пользовательским вводом отсутствие предварительной
проверки формата может привести к частым null
результатам.
В Node.js и браузерах используется один и тот же механизм
Date, но:
По этой причине toDate следует рассматривать как
вспомогательный слой, а не как строгий парсер дат.