Библиотека date-fns устанавливается как обычная
npm-зависимость и используется напрямую в серверной среде Node.js без
дополнительных настроек рантайма.
Установка:
npm install date-fns
или при использовании yarn:
yarn add date-fns
После установки доступ к функциям осуществляется через
require (CommonJS) либо через import (ES
Modules), в зависимости от конфигурации проекта.
Node.js исторически использует CommonJS-модули, поэтому наиболее совместимый способ подключения выглядит следующим образом:
const { format, addDays, subMonths } = require('date-fns');
const now = new Date();
console.log(format(now, 'yyyy-MM-dd'));
console.log(format(addDays(now, 7), 'yyyy-MM-dd'));
console.log(format(subMonths(now, 2), 'yyyy-MM-dd'));
Особенность date-fns заключается в том, что каждая
функция импортируется отдельно, что позволяет избегать загрузки лишнего
кода.
При использовании современных версий Node.js (14+ с включённым
"type": "module" в package.json) доступен
синтаксис ES Modules:
import { format, addDays } from 'date-fns';
const date = new Date();
const result = format(addDays(date, 3), 'dd.MM.yyyy');
console.log(result);
Пример package.json для включения ESM:
{
"type": "module"
}
Node.js не имеет ограничений браузера, связанных с часовыми поясами
пользовательской системы, однако поведение Date остаётся
привязанным к системному времени сервера.
Ключевые моменты:
Date является изменяемым объектом JavaScript, но
функции date-fns всегда возвращают новый экземпляр;Пример:
import { addHours } from 'date-fns';
const original = new Date();
const modified = addHours(original, 5);
console.log(original === modified); // false
date-fns часто используется в серверных API для
подготовки данных перед отправкой клиенту.
import { format } from 'date-fns';
export function getUserResponse(user) {
return {
id: user.id,
createdAt: format(user.createdAt, 'yyyy-MM-dd HH:mm:ss'),
};
}
Поддерживается широкий набор токенов форматирования:
yyyy — годMM — месяцdd — деньHH — часы (24-часовой формат)mm — минутыss — секундыВ Node.js часто требуется преобразование строк из базы данных или
внешних API в объекты Date.
import { parse, isValid } from 'date-fns';
const dateString = '2026-05-22 14:30:00';
const parsed = parse(dateString, 'yyyy-MM-dd HH:mm:ss', new Date());
if (isValid(parsed)) {
console.log(parsed.toISOString());
}
Функция isValid используется для проверки корректности
результата парсинга.
Node.js часто используется для серверной логики, где важны вычисления временных интервалов: дедлайны, TTL, расписания задач.
import { differenceInDays, addMinutes } from 'date-fns';
const start = new Date('2026-01-01');
const end = new Date('2026-01-20');
console.log(differenceInDays(end, start)); // 19
const timeout = addMinutes(new Date(), 30);
console.log(timeout);
Типичный сценарий — обработка данных перед отправкой через REST API или GraphQL.
import { formatISO, subDays } from 'date-fns';
export function buildReport() {
const endDate = new Date();
const startDate = subDays(endDate, 7);
return {
start: formatISO(startDate),
end: formatISO(endDate),
};
}
Формат formatISO удобен для стандартизации данных между
сервисами.
В серверных приложениях на Express date-fns используется
для логирования и обработки временных параметров запросов.
import express from 'express';
import { format } from 'date-fns';
const app = express();
app.get('/time', (req, res) => {
res.json({
serverTime: format(new Date(), 'HH:mm:ss'),
});
});
app.listen(3000);
Node.js часто применяется для фоновых задач. date-fns
помогает вычислять расписания.
import { addDays, isBefore } from 'date-fns';
const nextRun = addDays(new Date(), 1);
if (isBefore(new Date(), nextRun)) {
console.log('Задача ещё не должна выполняться');
}
date-fns написана на TypeScript и предоставляет строгую
типизацию без дополнительных деклараций.
import { format, addWeeks } from 'date-fns';
const date: Date = new Date();
const result: string = format(addWeeks(date, 2), 'yyyy-MM-dd');
Типы автоматически выводятся, что упрощает использование в серверных приложениях.
В смешанных проектах Node.js возможны случаи, когда часть кода использует CommonJS, а часть ES Modules.
// CommonJS файл
const { format } = require('date-fns');
module.exports.getDate = function () {
return format(new Date(), 'yyyy-MM-dd');
};
// ESM файл
import { format } from 'date-fns';
export function getDate() {
return format(new Date(), 'yyyy-MM-dd');
}
Node.js корректно обрабатывает оба подхода при правильной конфигурации.
Архитектура date-fns ориентирована на tree-shaking и
минимизацию размера сборки. В серверной среде это влияет на:
Пример точечного импорта:
import format from 'date-fns/format';
import addDays from 'date-fns/addDays';
Такой подход может быть полезен в высоконагруженных сервисах.
В Node.js часто требуется явная работа с временными зонами. Для этого используется дополнительный пакет:
npm install date-fns-tz
Пример:
import { format } from 'date-fns-tz';
const date = new Date();
const timeZone = 'Asia/Almaty';
const result = format(date, 'yyyy-MM-dd HH:mm:ssXXX', { timeZone });
console.log(result);
Этот подход позволяет корректно обрабатывать международные данные в backend-системах.