Для работы с Moment.js в современном JavaScript-проекте, построенном с использованием Webpack, библиотеку можно установить через npm:
npm install moment
После установки импорт библиотеки в коде выглядит следующим образом:
import moment from 'moment';
Важно учитывать, что Moment.js поставляется в виде одного большого файла, что может негативно сказываться на размере итогового бандла. В этом случае на помощь приходит tree-shaking, позволяющий исключать неиспользуемый код.
Создание даты:
const now = moment();
const specificDate = moment('2026-05-22', 'YYYY-MM-DD');
Moment.js поддерживает различные форматы и автоматическое распознавание ISO-строк.
Форматирование даты:
const formatted = moment().format('YYYY-MM-DD HH:mm:ss');
Доступны ключевые символы форматирования:
YYYY — полный год;MM — месяц с ведущим нулем;DD — день месяца;HH — часы в 24-часовом формате;mm — минуты;ss — секунды.Манипуляции с датами:
const nextWeek = moment().add(7, 'days');
const lastMonth = moment().subtract(1, 'months');
Методы add и subtract позволяют производить
арифметические операции с датами, поддерживая единицы:
days, months, years,
hours, minutes, seconds.
Сравнение и проверка:
moment('2026-05-22').isBefore('2026-06-01'); // true
moment('2026-05-22').isAfter('2026-05-01'); // true
moment('2026-05-22').isSame('2026-05-22'); // true
Moment.js предоставляет удобные методы для сравнения и проверки дат без необходимости ручного вычисления временных промежутков.
Для поддержки разных локалей необходимо импортировать соответствующие файлы:
import 'moment/locale/ru';
moment.locale('ru');
После установки локали, методы форматирования и отображения времени будут использовать выбранный язык.
moment().format('LLLL'); // Пятница, 22 мая 2026 г. 15:30
Moment.js исторически известен своим большим размером, особенно при подключении всех локалей. В результате без оптимизации итоговый бандл может вырасти на сотни килобайт. Для уменьшения размера используются два подхода: tree-shaking и ограничение локалей.
1. Tree-shaking Moment.js
Webpack способен удалять неиспользуемый код при использовании
модульной структуры ES6. Однако Moment.js экспортируется как единый
объект, поэтому стандартный tree-shaking с ним работает ограниченно. Для
эффективной оптимизации лучше использовать модульные альтернативы, такие
как dayjs или date-fns, которые поддерживают
полноценный tree-shaking.
2. Ограничение локалей через ContextReplacementPlugin:
const webpack = require('webpack');
module.exports = {
plugins: [
new webpack.ContextReplacementPlugin(
/moment[\/\\]locale$/,
/ru|en/
)
]
};
Этот метод позволяет включать только необходимые локали
(ru и en), значительно уменьшая размер
бандла.
moment.utc() для работы с
универсальным временем, чтобы избежать проблем с часовыми поясами.moment.parseZone(), если
нужно учитывать смещения в исходной дате.diff:const start = moment('2026-05-01');
const end = moment('2026-05-22');
const daysDiff = end.diff(start, 'days'); // 21
isValid:moment('2026-02-30').isValid(); // false
Применение Moment.js совместно с Webpack требует баланса между функциональностью и размером бандла. Основные моменты оптимизации:
ContextReplacementPlugin.Правильное применение этих подходов позволяет сохранять удобство работы с датами и временем, не жертвуя производительностью веб-приложения.