Работа с датами в JavaScript (Node.js): популярные библиотеки

Онлайн-тренажер Python для начинающих

Изучайте Python легко и без перегрузки теорией. Решайте практические задачи с автоматической проверкой, получайте подсказки на русском языке и пишите код прямо в браузере — без необходимости что-либо устанавливать.

Начать курс

Работа с датами в JavaScript (Node.js): обзор популярных библиотек

Работа с датами и временем — одна из самых частых задач в веб-разработке. Встроенный объект Date в JavaScript (Node.js) предоставляет базовые возможности, но часто оказывается неудобным и ограниченным: отсутствие удобного форматирования, парсинга, манипуляций с временными зонами и разницы между датами. К счастью, существует несколько зрелых библиотек, которые решают эти проблемы. В этой статье мы рассмотрим четыре наиболее популярных инструмента для работы с датами в Node.js.

1. Moment.js — классика (но с оговорками)

Moment.js долгое время была стандартом де-факто для работы с датами в JavaScript. Она предоставляет богатый API для парсинга, валидации, форматирования и манипуляций с датами.

Установка:

npm install moment

Пример использования:

const moment = require('moment');

// Текущая дата и время
const now = moment();
console.log(now.format('YYYY-MM-DD HH:mm:ss')); // 2025-03-21 14:30:00

// Парсинг строки
const date = moment('2025-12-25', 'YYYY-MM-DD');
console.log(date.format('dddd, MMMM Do YYYY')); // Thursday, December 25th 2025

// Манипуляции
const future = moment().add(7, 'days').subtract(2, 'hours');
console.log(future.fromNow()); // "in 6 days"

// Разница между датами
const a = moment('2025-01-01');
const b = moment('2025-03-21');
console.log(b.diff(a, 'days')); // 79

Плюсы: огромное сообщество, детальная документация, множество плагинов (работа с часовыми поясами, локализация).

Минусы: библиотека устарела (режим поддержки), большой размер (~230 KB), мутирующие методы (изменяют исходный объект). Разработчики рекомендуют использовать современные альтернативы.

2. date-fns — модульный и функциональный подход

date-fns — это современная библиотека, построенная на принципах функционального программирования. Каждая функция — это отдельный модуль, что позволяет подключать только нужные части и уменьшать размер бандла.

Установка:

npm install date-fns

Пример использования:

const { format, addDays, subHours, differenceInDays, parseISO } = require('date-fns');

// Форматирование
const now = new Date();
console.log(format(now, 'yyyy-MM-dd HH:mm:ss')); // 2025-03-21 14:30:00

// Манипуляции (иммутабельно — создаётся новый объект)
const future = addDays(now, 7);
const adjusted = subHours(future, 2);
console.log(format(adjusted, 'dd.MM.yyyy')); // 28.03.2025

// Разница
const start = parseISO('2025-01-01');
const end = new Date();
console.log(differenceInDays(end, start)); // 79

// Локализация (русская)
const { ru } = require('date-fns/locale');
console.log(format(now, 'PPPP', { locale: ru })); // "пятница, 21 марта 2025 г."

Плюсы: модульность, иммутабельность (не меняет исходные объекты), TypeScript-поддержка, отличная документация.

Минусы: требуется Node.js 14+, нет встроенной поддержки часовых поясов (требуется date-fns-tz).

3. Day.js — лёгкая и быстрая альтернатива Moment.js

Day.js — это минималистичная библиотека (всего 2 KB), которая имеет API, почти полностью совместимый с Moment.js. Она идеально подходит, если нужно заменить Moment.js без переписывания кода.

Установка:

npm install dayjs

Пример использования:

const dayjs = require('dayjs');
const utc = require('dayjs/plugin/utc');
const relativeTime = require('dayjs/plugin/relativeTime');

dayjs.extend(utc);
dayjs.extend(relativeTime);

// Базовое использование (как в Moment)
const now = dayjs();
console.log(now.format('YYYY-MM-DD HH:mm:ss')); // 2025-03-21 14:30:00

// Работа с UTC
const utcDate = dayjs.utc();
console.log(utcDate.format()); // 2025-03-21T11:30:00Z

// Относительное время
console.log(dayjs('2025-03-20').fromNow()); // "a day ago"

// Разница
const a = dayjs('2025-01-01');
const b = dayjs('2025-03-21');
console.log(b.diff(a, 'day')); // 79

П

Рекомендаций