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

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

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

Начать курс

Обзор библиотек для работы с датами в JavaScript (Node.js)

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

1. Moment.js — классика жанра

Долгое время Moment.js был стандартом де-факто для работы с датами. Он предоставляет богатый API для парсинга, валидации, манипуляции и отображения дат. Однако библиотека считается устаревшей (maintenance mode) и не рекомендуется для новых проектов из-за большого размера (около 300 КБ) и проблем с производительностью.

Установка:

npm install moment

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

const moment = require('moment');

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

// Парсинг строки
const date = moment('2025-12-31', 'YYYY-MM-DD');
console.log(date.add(1, 'day').format('DD.MM.YYYY')); // 01.01.2026

// Разница между датами
const start = moment('2025-01-01');
const end = moment('2025-03-15');
console.log('Дней прошло:', end.diff(start, 'days')); // 73

2. Day.js — легковесная альтернатива

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

Установка:

npm install dayjs

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

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

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

// Текущая дата
console.log(dayjs().format('DD.MM.YYYY')); // 15.03.2025

// Относительное время
console.log(dayjs('2025-03-10').fromNow()); // 5 дней назад

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

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

date-fns — это современная библиотека, построенная на принципах функционального программирования. В отличие от Moment.js, она не использует мутабельные объекты и поддерживает древовидную структуру (tree-shaking), что позволяет импортировать только нужные функции и уменьшить размер бандла.

Установка:

npm install date-fns

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

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

// Форматирование с локалью
console.log(format(new Date(), 'd MMMM yyyy', { locale: ru })); // 15 марта 2025

// Манипуляции
const future = addDays(new Date(), 10);
console.log(format(future, 'yyyy-MM-dd')); // 2025-03-25

// Разница
const d1 = parseISO('2025-01-01');
const d2 = new Date();
console.log('Дней с НГ:', differenceInDays(d2, d1)); // 73

4. Luxon — современный стандарт

Luxon — это библиотека от создателей Moment.js, но лишенная их недостатков. Она использует нативные объекты DateTime, Duration и Interval, поддерживает часовые пояса и интернационализацию "из коробки". Luxon идеально подходит для сложных сценариев с временными зонами.

Установка:

npm install luxon

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

const { DateTime, Interval } = require('luxon');

// Текущая дата с часовым поясом
const now = DateTime.now().setZone('Europe/Moscow');
console.log(now.toFormat('dd.MM.yyyy HH:mm')); // 15.03.2025 17:30

// Парсинг ISO
const dt = DateTime.fromISO('2025-12-31T23:59:59');
console.log(dt.plus({ days: 1 }).toISODate()); // 2026                    

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