В основе работы с датами в JavaScript лежит встроенный объект
Date, предоставляющий доступ к времени на уровне
миллисекунд. Библиотека date-fns не заменяет этот объект, а расширяет и
стандартизирует операции создания, парсинга и преобразования дат,
устраняя неоднозначности и поведенческие различия между форматами
входных данных.
Создание объекта даты в чистом JavaScript выполняется через
конструктор Date, который поддерживает несколько форматов
входных данных.
const now = new Date();
Создание текущего момента времени основано на системных часах окружения выполнения.
Передача числового значения интерпретируется как количество миллисекунд с начала эпохи Unix:
const dateFromTimestamp = new Date(1700000000000);
Передача отдельных компонентов даты:
const specificDate = new Date(2026, 0, 15, 10, 30, 0);
Особенность конструкции заключается в том, что месяц задаётся с нуля,
где 0 соответствует январю, а 11 —
декабрю.
Конструктор Date поддерживает парсинг строк, однако
поведение зависит от реализации движка JavaScript и формата строки.
const parsedDate = new Date("2026-01-15T10:30:00Z");
ISO 8601 считается наиболее стабильным форматом, однако любые отклонения от стандарта могут приводить к неоднозначному результату:
const ambiguousDate = new Date("01/15/2026");
Такие случаи создают зависимость от локали и окружения выполнения, что делает прямой парсинг строк ненадёжным.
ISO 8601 используется как универсальный стандарт представления даты и времени:
const isoDate = new Date("2026-01-15T10:30:00.000Z");
Суффикс Z фиксирует временную зону как UTC. При
отсутствии указания зоны происходит интерпретация в локальном часовом
поясе среды выполнения.
Unix timestamp представляет собой количество секунд или миллисекунд с 1 января 1970 года UTC.
const dateFromMs = new Date(1700000000000);
При работе с секундными значениями требуется преобразование:
const seconds = 1700000000;
const dateFromSeconds = new Date(seconds * 1000);
Ошибки в единицах измерения приводят к смещению даты на десятилетия, что является одной из наиболее частых проблем при обработке временных меток.
Библиотека date-fns предоставляет функцию parseISO,
обеспечивающую строгий и предсказуемый парсинг ISO-строк без зависимости
от реализации Date.parse.
import { parseISO } from "date-fns";
const date = parseISO("2026-01-15T10:30:00Z");
parseISO поддерживает только корректные ISO-форматы, что
исключает неоднозначные интерпретации и ошибки локали.
Функция parse используется для преобразования строки в
объект Date по заданному шаблону.
import { parse } from "date-fns";
const date = parse(
"15-01-2026 10:30",
"dd-MM-yyyy HH:mm",
new Date()
);
Третий аргумент задаёт опорную дату, используемую для заполнения отсутствующих компонентов.
Механизм основан на строгом сопоставлении токенов формата, что позволяет контролировать интерпретацию входных данных независимо от локали среды.
Функция fromUnixTime предназначена для преобразования
секундного Unix timestamp в объект Date.
import { fromUnixTime } from "date-fns";
const date = fromUnixTime(1700000000);
В отличие от ручного умножения на 1000, функция явно выражает семантику исходного значения и снижает вероятность ошибок единиц измерения.
Разнородные источники данных (API, базы данных, пользовательский ввод) приводят к необходимости унифицированного подхода к созданию даты.
Типовые формы входных значений:
Использование date-fns позволяет разделить эти случаи на специализированные функции:
import { parseISO, parse, fromUnixTime } from "date-fns";
const a = parseISO("2026-01-15T10:30:00Z");
const b = fromUnixTime(1700000000);
const c = parse("15.01.2026", "dd.MM.yyyy", new Date());
Такое разделение уменьшает неопределённость интерпретации и повышает предсказуемость результата.
Объект Date хранит время в виде количества миллисекунд,
но отображение зависит от локальной временной зоны среды выполнения.
ISO-строки с Z фиксируют UTC:
new Date("2026-01-15T10:30:00Z");
Строки без указания зоны интерпретируются как локальное время:
new Date("2026-01-15T10:30:00");
Функции date-fns при создании даты не изменяют базовую модель
Date, но обеспечивают более строгий контроль входных
данных, снижая риск неоднозначного парсинга и скрытых смещений
времени.