Библиотека Date-fns предоставляет удобный, модульный
и функциональный подход к работе с датами в JavaScript. Она позволяет
выполнять большинство стандартных операций с датами без необходимости
использования тяжеловесных объектов вроде Date или
Moment.js, что особенно важно в проектах на
SvelteKit, где минимизация размера бандла и скорость
загрузки критичны.
Установка через npm:
npm install date-fns
Импорт конкретных функций выполняется по модульной схеме:
import { format, addDays, differenceInDays, parseISO } from 'date-fns';
Использование модульного импорта уменьшает размер бандла, так как подключаются только необходимые функции.
Функция format позволяет преобразовать объекты
Date в строки в заданном формате:
const today = new Date();
const formatted = format(today, "dd.MM.yyyy");
console.log(formatted); // 21.03.2026
Поддерживаются такие ключи форматирования, как:
yyyy — год, например 2026MM — месяц с ведущим нулемdd — день месяца с ведущим нулемHH — часы в 24-часовом форматеmm — минутыss — секундыФункция format также поддерживает локализацию:
import { format } from 'date-fns';
import { ru } from 'date-fns/locale';
const formattedRu = format(new Date(), "d MMMM yyyy", { locale: ru });
console.log(formattedRu); // 21 марта 2026
Для преобразования строк в объекты Date используется
parse или parseISO:
import { parseISO } from 'date-fns';
const dateString = "2026-03-21";
const dateObj = parseISO(dateString);
console.log(dateObj); // Sat Mar 21 2026 00:00:00 GMT+0000
parseISO особенно удобен при работе с API, возвращающими
даты в ISO-формате.
Date-fns позволяет легко выполнять арифметические операции:
import { addDays, subMonths } from 'date-fns';
const today = new Date();
const nextWeek = addDays(today, 7);
const lastMonth = subMonths(today, 1);
console.log(nextWeek); // дата через 7 дней
console.log(lastMonth); // дата месяц назад
Для изменения отдельных частей даты также используются функции:
setYear(date, year)setMonth(date, month)setDate(date, day)Пример:
import { setYear } from 'date-fns';
const newYearDate = setYear(new Date(), 2030);
console.log(newYearDate); // дата с изменённым годом 2030
Функции differenceInDays,
differenceInHours, differenceInMinutes
позволяют вычислять интервалы между датами:
import { differenceInDays } from 'date-fns';
const start = new Date(2026, 2, 1);
const end = new Date(2026, 2, 21);
const diff = differenceInDays(end, start);
console.log(diff); // 20
Это удобно для создания таймеров, подсчёта сроков или вычисления возраста объектов.
Для сравнения и проверки используются функции:
isBefore(date1, date2) — дата1 раньше даты2isAfter(date1, date2) — дата1 позже даты2isEqual(date1, date2) — даты совпадаютПример:
import { isBefore, isAfter } from 'date-fns';
const now = new Date();
const event = new Date(2026, 3, 1);
console.log(isBefore(now, event)); // true
console.log(isAfter(now, event)); // false
Date-fns поддерживает множество локалей, что позволяет форматировать даты в нужном языке без сторонних библиотек. Импорт локали выполняется отдельно:
import { format } from 'date-fns';
import { enUS, fr } from 'date-fns/locale';
const date = new Date();
console.log(format(date, "PPP", { locale: fr })); // 21 mars 2026
console.log(format(date, "PPP", { locale: enUS })); // Mar 21, 2026
В SvelteKit компоненты работают с датами аналогично обычному JavaScript, но важно учитывать реактивность:
<script>
import { format, addDays } from 'date-fns';
let today = new Date();
$: nextWeek = format(addDays(today, 7), "dd.MM.yyyy");
</script>
<p>Сегодня: {format(today, "dd.MM.yyyy")}</p>
<p>Через неделю: {nextWeek}</p>
Использование реактивных переменных $: позволяет
автоматически обновлять отображение даты при изменении исходного
объекта.
format и арифметические функции напрямую в
реактивных выражениях SvelteKit для динамических интерфейсов.Date-fns также предлагает функции для удобной работы с календарными структурами:
startOfDay(date), endOfDay(date) — начало
и конец дняstartOfWeek(date), endOfWeek(date) —
границы неделиstartOfMonth(date), endOfMonth(date) —
границы месяцаПример:
import { startOfMonth, endOfMonth } from 'date-fns';
const now = new Date();
const firstDay = startOfMonth(now);
const lastDay = endOfMonth(now);
console.log(firstDay, lastDay);
Эти функции полезны для создания календарей, планировщиков и визуализации периодов времени.
Date-fns сочетает в себе простоту, модульность и высокую производительность, делая работу с датами в SvelteKit легкой, предсказуемой и эффективной.