Библиотека Moment.js поддерживает создание даты не только из строк и временных меток, но и из объектов. Такой подход удобен при работе с формами, API, пользовательскими настройками и любыми структурами данных, где компоненты даты и времени уже разделены по полям.
Создание объекта даты выполняется через передачу обычного
JavaScript-объекта в функцию moment():
moment({
year: 2025,
month: 4,
day: 15
});
Каждое свойство объекта соответствует определённой части даты или времени.
Moment.js поддерживает следующие поля:
| Свойство | Описание |
|---|---|
year |
Год |
month |
Месяц |
date |
День месяца |
day |
День недели |
hour |
Часы |
minute |
Минуты |
second |
Секунды |
millisecond |
Миллисекунды |
Пример полной даты:
const date = moment({
year: 2025,
month: 6,
date: 20,
hour: 14,
minute: 35,
second: 10
});
console.log(date.format("YYYY-MM-DD HH:mm:ss"));
Результат:
2025-07-20 14:35:10
monthПоле month использует нумерацию с нуля:
| Значение | Месяц |
|---|---|
0 |
Январь |
1 |
Февраль |
2 |
Март |
| … | … |
11 |
Декабрь |
Пример:
moment({
year: 2025,
month: 0,
date: 1
});
Создаёт:
2025-01-01
Это поведение полностью повторяет стандартный объект
Date в JavaScript.
date и
dayВажно различать свойства date и day.
date — день месяцаmoment({
year: 2025,
month: 4,
date: 10
});
Создаётся:
10 мая 2025
day — день неделиmoment({
year: 2025,
month: 4,
day: 1
});
Значение 1 означает понедельник.
При использовании day Moment.js вычисляет ближайший
соответствующий день недели относительно текущей недели.
Если указать только время, отсутствующие части даты будут взяты из текущего момента.
const time = moment({
hour: 18,
minute: 45
});
console.log(time.format("YYYY-MM-DD HH:mm"));
Если текущая дата:
2026-05-21
Результат:
2026-05-21 18:45
Moment.js позволяет указывать только необходимые поля.
moment({
year: 2030
});
Результат:
2030-01-01 00:00:00
moment({
year: 2030,
month: 9
});
Результат:
2030-10-01 00:00:00
Moment.js автоматически корректирует выход значений за допустимые пределы.
moment({
year: 2025,
month: 14
});
Результат:
2026-03-01
moment({
year: 2025,
month: 0,
date: 40
});
Результат:
2025-02-09
Такой механизм особенно полезен при вычислениях дат.
const date = moment({
year: 2025,
month: 3,
date: 5,
hour: 12,
minute: 10,
second: 15,
millisecond: 250
});
console.log(date.format("HH:mm:ss.SSS"));
Результат:
12:10:15.250
Moment.js поддерживает короткие варианты названий:
| Полное имя | Сокращение |
|---|---|
year |
y |
month |
M |
date |
d |
hour |
h |
minute |
m |
second |
s |
millisecond |
ms |
Пример:
moment({
y: 2025,
M: 7,
d: 12,
h: 16,
m: 20
});
Часто сервер возвращает дату в виде набора полей:
const response = {
year: 2025,
month: 10,
date: 8,
hour: 9,
minute: 15
};
Moment.js позволяет напрямую преобразовать такой объект:
const date = moment(response);
console.log(date.format("YYYY-MM-DD HH:mm"));
Создание из объекта удобно при программной генерации параметров.
const currentYear = 2025;
const currentMonth = 6;
const date = moment({
year: currentYear,
month: currentMonth,
date: 1
});
Пример обработки данных HTML-формы:
const formData = {
year: Number(yearInput.value),
month: Number(monthInput.value),
date: Number(dayInput.value)
};
const birthday = moment(formData);
Такой подход делает код более читаемым и избавляет от ручной сборки строк.
const year = 2025;
const month = 11;
const date = 24;
const hour = 23;
const minute = 59;
const newYearEve = moment({
year,
month,
date,
hour,
minute
});
После создания даты рекомендуется проверять её валидность.
const invalidDate = moment({
year: 2025,
month: 1,
date: 31
});
console.log(invalidDate.isValid());
Несмотря на автоматическую нормализацию, некоторые комбинации могут быть логически ошибочными для приложения.
Moment.js поддерживает два похожих подхода:
moment([2025, 4, 10, 12, 30]);
moment({
year: 2025,
month: 4,
date: 10,
hour: 12,
minute: 30
});
Создание из объекта считается более читаемым и менее подверженным ошибкам, особенно при большом количестве параметров.
Для создания даты в UTC используется moment.utc():
const utcDate = moment.utc({
year: 2025,
month: 3,
date: 18,
hour: 10
});
console.log(utcDate.format());
После создания объект Moment можно изменять стандартными методами.
const date = moment({
year: 2025,
month: 0,
date: 1
});
date
.add(10, "days")
.subtract(2, "hours");
console.log(date.format());
const fiscalYearStart = moment({
year: 2025,
month: 3,
date: 1
}).startOf("day");
При передаче объекта Moment.js:
Date.Упрощённая схема:
moment({
year: 2025,
month: 15,
date: 40
});
Преобразуется примерно в:
new Date(2025, 15, 40)
После чего JavaScript автоматически корректирует дату.
function createMeeting(year, month, date, hour, minute) {
return moment({
year,
month,
date,
hour,
minute
});
}
const meeting = createMeeting(2025, 8, 15, 14, 30);
console.log(
meeting.format("DD.MM.YYYY HH:mm")
);
const task = {
year: 2025,
month: 5,
date: 20,
hour: 23,
minute: 59
};
const deadline = moment(task);
console.log(deadline.fromNow());
moment({
year: 2025,
month: 11,
date: 31
});
Сразу понятно, какое значение чему соответствует.
Объекты легко:
В массивах легко перепутать порядок:
moment([2025, 11, 31]);
В объекте ошибка менее вероятна:
moment({
year: 2025,
month: 11,
date: 31
});
Наиболее частый источник ошибок:
month: 0
означает январь.
dayday: 5
— это пятница, а не пятый день месяца.
Для дня месяца следует использовать date.
Иногда нежелательна:
moment({
year: 2025,
month: 1,
date: 31
});
может привести к неожиданному результату вместо ошибки.