Для работы с Moment.js в приложениях на React сначала необходимо установить библиотеку через npm или yarn:
npm install moment
# или
yarn add moment
Импортировать библиотеку в компонент можно следующим образом:
import moment from 'moment';
При необходимости поддержки локализации добавляется соответствующий файл локали:
import 'moment/locale/ru';
moment.locale('ru');
После этого все функции Moment.js будут использовать выбранную локаль для форматирования дат и времени.
Moment.js позволяет легко создавать объекты даты. Основные способы:
const now = moment(); // текущая дата и время
const specificDate = moment('2026-05-22'); // дата из строки
const fromComponents = moment([2026, 4, 22, 15, 30]); // [год, месяц (0-11), день, час, минута]
Форматирование осуществляется с помощью метода
format:
now.format('YYYY-MM-DD'); // '2026-05-22'
now.format('DD/MM/YYYY'); // '22/05/2026'
now.format('dddd, MMMM Do YYYY, h:mm:ss a'); // 'пятница, Май 22-й 2026, 3:45:12 pm'
Ключевые символы для форматирования:
YYYY – полный годMM – месяц с ведущим нулемDD – день с ведущим нулемddd / dddd – короткое и полное название
дня неделиHH / hh – часы в 24-часовом и 12-часовом
форматеmm – минутыss – секундыa / A – am/pmMoment.js предоставляет удобные методы для сложения и вычитания времени:
const tomorrow = moment().add(1, 'days'); // добавляет один день
const lastWeek = moment().subtract(7, 'days'); // вычитает 7 дней
const nextMonth = moment().add(1, 'months');
const lastYear = moment().subtract(1, 'years');
Методы add и subtract поддерживают
следующие единицы времени: 'years', 'months',
'weeks', 'days', 'hours',
'minutes', 'seconds'.
Для сравнения используются функции isBefore,
isAfter, isSame:
const start = moment('2026-05-01');
const end = moment('2026-05-22');
start.isBefore(end); // true
end.isAfter(start); // true
start.isSame('2026-05-01'); // true
Для проверки диапазона используется isBetween:
const date = moment('2026-05-15');
date.isBetween('2026-05-10', '2026-05-20'); // true
По умолчанию Moment.js использует локальное время браузера. Для поддержки UTC и часовых поясов:
const utcTime = moment.utc(); // текущая дата в UTC
const localFromUtc = utcTime.local(); // конвертирование UTC в локальное время
Для более сложной работы с часовыми поясами используется Moment Timezone:
import moment from 'moment-timezone';
const nyTime = moment.tz('2026-05-22 15:00', 'America/New_York');
const moscowTime = nyTime.clone().tz('Europe/Moscow');
Для рендеринга дат в JSX удобно использовать вычисляемые переменные:
function DateDisplay({ date }) {
const formattedDate = moment(date).format('DD MMMM YYYY, HH:mm');
return <span>{formattedDate}</span>;
}
Если дата часто обновляется, можно использовать состояние и эффекты:
import { useState, useEffect } from 'react';
function Clock() {
const [time, setTime] = useState(moment());
useEffect(() => {
const timer = setInterval(() => {
setTime(moment());
}, 1000);
return () => clearInterval(timer);
}, []);
return <div>{time.format('HH:mm:ss')}</div>;
}
Такой подход обеспечивает автоматическое обновление времени на экране каждую секунду.
Moment.js позволяет работать с временными интервалами через объект
duration:
const duration = moment.duration(2, 'hours');
duration.asMinutes(); // 120
duration.add(30, 'minutes'); // добавляем 30 минут
duration.subtract(15, 'minutes'); // вычитаем 15 минут
В React это удобно для отображения таймеров или обратного отсчета:
function Countdown({ endDate }) {
const [remaining, setRemaining] = useState(moment.duration(moment(endDate).diff(moment())));
useEffect(() => {
const interval = setInterval(() => {
setRemaining(moment.duration(moment(endDate).diff(moment())));
}, 1000);
return () => clearInterval(interval);
}, [endDate]);
return <div>{remaining.hours()}:{remaining.minutes()}:{remaining.seconds()}</div>;
}
Moment.js умеет парсить строки в различные форматы:
const date1 = moment('22-05-2026', 'DD-MM-YYYY');
const date2 = moment('05/22/2026 15:30', 'MM/DD/YYYY HH:mm');
Для проверки корректности даты используется метод
isValid:
const invalidDate = moment('32-05-2026', 'DD-MM-YYYY');
invalidDate.isValid(); // false
При работе с React-формами удобно валидировать и форматировать даты перед отправкой на сервер:
function handleSubmit(event) {
event.preventDefault();
const inputDate = event.target.date.value; // '22/05/2026'
const parsedDate = moment(inputDate, 'DD/MM/YYYY');
if (!parsedDate.isValid()) {
console.error('Неверная дата');
return;
}
const formatted = parsedDate.format('YYYY-MM-DD');
console.log('Отправляем на сервер:', formatted);
}
Такой подход гарантирует единый формат данных и упрощает работу с бэкендом.
Moment.js значительно упрощает:
Date требует ручного составления
строк);Date не имеет методов
add и subtract);Это делает Moment.js особенно полезным в React-приложениях, где данные даты часто отображаются, обновляются и передаются между компонентами.