Библиотека date-fns представляет собой современный
инструмент для работы с датами в JavaScript. Она обеспечивает
функциональный подход к обработке дат, предоставляя более 200 функций
для парсинга, форматирования, сравнения, манипуляций и вычислений с
объектами Date. В отличие от встроенного объекта
Date и других библиотек вроде Moment.js, date-fns
ориентирована на модульность, позволяя импортировать только необходимые
функции, что снижает размер итогового бандла и повышает
производительность приложений.
Ключевые возможности библиотеки включают:
Объект Date в JavaScript имеет ряд ограничений, включая
сложность вычислений разницы между датами, работу с часовыми поясами и
форматирование. date-fns решает эти проблемы, предоставляя чистые
функции, которые не мутируют исходный объект Date, а
возвращают новый объект с требуемыми изменениями.
Например, для добавления 5 дней к текущей дате используется функция:
import { addDays } from 'date-fns';
const today = new Date();
const futureDate = addDays(today, 5);
Функция addDays возвращает новый объект Date, не изменяя
today. Такой подход предотвращает непреднамеренные побочные
эффекты и повышает читаемость кода.
Форматирование — одна из ключевых задач при работе с датами. date-fns
предоставляет функцию format, которая позволяет
преобразовать дату в строку с использованием шаблонов.
Примеры форматов:
import { format } from 'date-fns';
const date = new Date(2026, 4, 22); // 22 мая 2026
format(date, 'dd/MM/yyyy'); // "22/05/2026"
format(date, 'EEEE, MMMM do, yyyy'); // "Friday, May 22nd, 2026"
Особенности:
dd, MM,
yyyy, EEEE) строго соответствуют стандарту
библиотеки.import { ru } from 'date-fns/locale'.Парсинг строк в объект Date с использованием встроенного конструктора
new Date() часто приводит к неожиданным результатам,
особенно при работе с нестандартными форматами. date-fns предоставляет
функцию parse для безопасного преобразования строк в
Date:
import { parse } from 'date-fns';
const dateString = '22-05-2026';
const parsedDate = parse(dateString, 'dd-MM-yyyy', new Date());
new Date()) служит отправной точкой
для вычисления даты.Invalid Date.Для сравнения дат используются функции isBefore,
isAfter, isEqual. Для вычисления интервалов
доступны differenceInDays, differenceInMonths
и подобные:
import { differenceInDays, isBefore } from 'date-fns';
const startDate = new Date(2026, 4, 22);
const endDate = new Date(2026, 5, 1);
const daysBetween = differenceInDays(endDate, startDate); // 10
const check = isBefore(startDate, endDate); // true
Преимущества:
Библиотека позволяет добавлять и вычитать разные единицы времени с
высокой точностью. Функции addDays, subDays,
addMonths, subYears возвращают новые объекты
Date:
import { subMonths, addYears } from 'date-fns';
const now = new Date();
const lastMonth = subMonths(now, 1);
const nextYear = addYears(now, 1);
Особое внимание уделяется корректной работе с переходами через месяц, год и високосные даты.
Функции вроде eachDayOfInterval,
isWithinInterval, intervalToDuration упрощают
работу с диапазонами дат:
import { eachDayOfInterval, isWithinInterval } from 'date-fns';
const interval = { start: new Date(2026, 4, 1), end: new Date(2026, 4, 7) };
const days = eachDayOfInterval(interval); // массив всех дней с 1 по 7 мая
const checkDate = new Date(2026, 4, 4);
const result = isWithinInterval(checkDate, interval); // true
Преимущества интервалов:
date-fns поддерживает множество языков, что позволяет форматировать даты в соответствии с локальными стандартами. Пример использования русской локализации:
import { format } from 'date-fns';
import { ru } from 'date-fns/locale';
const date = new Date(2026, 4, 22);
format(date, "eeee, d MMMM yyyy", { locale: ru }); // "пятница, 22 мая 2026"
date-fns/locale.date-fns обеспечивает системный, предсказуемый и безопасный способ работы с датами в JavaScript, что делает её незаменимым инструментом для современных веб-приложений.