Для работы с Moment.js в Angular рекомендуется использовать пакет
moment, который устанавливается через npm:
npm install moment --save
После установки библиотеку можно импортировать в нужные компоненты или сервисы:
import * as moment from 'moment';
Важно использовать типы TypeScript для Moment.js. Для этого устанавливают дополнительные типы:
npm install @types/moment --save-dev
Использование типизации позволяет автокомплешн в редакторе и обеспечивает строгую проверку типов.
Создание объекта Moment осуществляется несколькими способами:
// Текущая дата и время
const now = moment();
// Конкретная дата
const specificDate = moment('2026-05-22', 'YYYY-MM-DD');
// Создание с объектом
const dateObj = moment({ year: 2026, month: 4, day: 22 }); // месяц начинается с 0
Форматирование дат выполняется через метод
format():
const formatted = now.format('YYYY-MM-DD HH:mm:ss');
Ключевые параметры форматирования:
YYYY – полный годMM – месяц с ведущим нулёмDD – день месяцаHH – часы 24-часового форматаmm – минутыss – секундыИспользование форматирования облегчает интеграцию дат в шаблоны Angular с помощью привязки данных.
Moment.js поддерживает различные языки. Для Angular важно корректно установить локаль:
import 'moment/locale/ru';
moment.locale('ru');
const dateInRussian = moment().format('LLLL');
Метод locale() изменяет локаль глобально для всего
приложения. Для компонентов можно применять временные локали с помощью
locale() на отдельном объекте Moment:
const englishDate = moment().locale('en').format('LLLL');
Moment.js предоставляет удобные методы для арифметики с датами:
const today = moment();
const nextWeek = today.clone().add(7, 'days');
const lastMonth = today.clone().subtract(1, 'months');
Ключевые единицы измерения времени:
years, months, weeks,
days, hours, minutes,
seconds, millisecondsМетод clone() необходим для сохранения оригинального
объекта без изменения его состояния, что особенно важно при работе с
Angular, где объекты часто передаются между компонентами.
Для проверки и сравнения Moment.js предлагает методы:
const start = moment('2026-05-01');
const end = moment('2026-05-31');
const isAfter = end.isAfter(start); // true
const isBefore = start.isBefore(end); // true
const isSame = start.isSame(moment('2026-05-01')); // true
Методы isBetween(), isSameOrAfter(),
isSameOrBefore() позволяют гибко проверять диапазоны
дат.
В Angular формы часто используют два направления работы с датами:
this.form.patchValue({
date: moment(this.model.date).format('YYYY-MM-DD')
});
const dateFromForm = moment(this.form.value.date, 'YYYY-MM-DD');
Такой подход обеспечивает корректную работу с датами и временем без ошибок преобразования.
Для работы с часовыми поясами используется библиотека
moment-timezone:
npm install moment-timezone --save
Пример использования:
import * as moment from 'moment-timezone';
const nyTime = moment.tz('2026-05-22 12:00', 'America/New_York');
const moscowTime = nyTime.clone().tz('Europe/Moscow');
Это позволяет в Angular-приложениях отображать время для разных регионов без потери точности.
Для упрощения форматирования в шаблонах можно создать кастомный pipe:
import { Pipe, PipeTransform } from '@angular/core';
import * as moment from 'moment';
@Pipe({ name: 'momentFormat' })
export class MomentFormatPipe implements PipeTransform {
transform(value: string | Date, format: string = 'LL'): string {
return moment(value).format(format);
}
}
Использование в шаблоне:
<p>{{ user.birthDate | momentFormat:'DD MMMM YYYY' }}</p>
Такой подход делает отображение дат удобным и повторно используемым в любом компоненте Angular.
Moment.js позволяет легко проверять корректность введённых данных:
const invalidDate = moment('2026-02-30', 'YYYY-MM-DD', true);
console.log(invalidDate.isValid()); // false
Третий параметр true включает строгую проверку формата.
Это особенно полезно при работе с пользовательскими формами в
Angular.
Moment.js упрощает работу с датами по сравнению с объектом
Date:
getMonth(), getFullYear().В Angular это критически важно для построения динамических и международных приложений, где управление датами должно быть точным и гибким.