Получение часов, минут, секунд, миллисекунд

В библиотеке Moment.js работа с временем построена вокруг объекта moment(), который предоставляет единый интерфейс для извлечения и изменения временных компонентов. Доступ к часам, минутам, секундам и миллисекундам реализован через набор одноимённых методов-геттеров и сеттеров, работающих в локальной или UTC-зоне.


Получение часов

Часы извлекаются методом hour():

moment().hour()

Возвращаемое значение находится в диапазоне от 0 до 23, где 0 соответствует полуночи, а 23 — последнему часу суток.

Пример:

const m = moment('2026-05-21 14:35:10');
m.hour(); // 14

Метод также выполняет роль сеттера при передаче аргумента:

m.hour(9);
m.format('YYYY-MM-DD HH:mm:ss'); // 2026-05-21 09:35:10

Изменение часов не затрагивает остальные компоненты даты, если не происходит переход через границы суток.


Получение минут

Минуты извлекаются методом minute():

moment().minute()

Диапазон значений — от 0 до 59.

Пример получения:

const m = moment('2026-05-21 14:35:10');
m.minute(); // 35

Пример установки:

m.minute(10);
m.format('HH:mm:ss'); // 14:10:10

При выходе за пределы допустимого диапазона происходит нормализация времени с изменением часов.

const m = moment('2026-05-21 14:50:00');
m.minute(75);
m.format('HH:mm:ss'); // 15:15:00

Получение секунд

Секунды доступны через метод second():

moment().second()

Значения варьируются от 0 до 59.

Пример:

const m = moment('2026-05-21 14:35:10');
m.second(); // 10

Установка значения:

m.second(45);
m.format('HH:mm:ss'); // 14:35:45

Как и в случае с минутами, выход за пределы диапазона приводит к перерасчёту времени:

m.second(70);
m.format('HH:mm:ss'); // 14:36:10

Получение миллисекунд

Миллисекунды извлекаются методом millisecond():

moment().millisecond()

Диапазон значений — от 0 до 999.

Пример:

const m = moment('2026-05-21 14:35:10.250');
m.millisecond(); // 250

Установка значения:

m.millisecond(900);
m.format('HH:mm:ss.SSS'); // 14:35:10.900

Переполнение миллисекунд также нормализуется:

m.millisecond(1200);
m.format('HH:mm:ss.SSS'); // 14:35:11.200

Работа в UTC-времени

Для работы в координированном универсальном времени используется метод utc():

moment.utc()

Все методы доступа к компонентам времени сохраняются и ведут себя аналогично локальному времени:

const m = moment.utc('2026-05-21 14:35:10');

m.hour();       // часы в UTC
m.minute();     // минуты в UTC
m.second();     // секунды в UTC
m.millisecond();// миллисекунды в UTC

Установка значений также применяется в пределах UTC-контекста:

m.hour(12).minute(0).second(0);
m.format(); // дата в UTC с обновлённым временем

Комбинирование получения и изменения

Методы hour, minute, second, millisecond поддерживают цепочку вызовов, так как каждый сеттер возвращает изменённый объект:

const m = moment();

m.hour(8)
 .minute(30)
 .second(15)
 .millisecond(500);

m.format('HH:mm:ss.SSS');

Такой подход используется для последовательной нормализации временных компонентов без промежуточных переменных.


Извлечение всех компонентов времени

Часто требуется получить сразу несколько частей времени из одного объекта:

const m = moment('2026-05-21 14:35:10.250');

const time = {
  hours: m.hour(),
  minutes: m.minute(),
  seconds: m.second(),
  milliseconds: m.millisecond()
};

Подобная структура используется при подготовке данных для интерфейсов, логирования и временных вычислений.


Особенности поведения при переполнении

Все методы изменения времени в Moment.js обладают общей моделью нормализации:

  • превышение верхней границы приводит к увеличению старшего компонента
  • отрицательные значения уменьшают старший компонент
  • перерасчёт выполняется автоматически

Пример с отрицательными значениями:

const m = moment('2026-05-21 10:00:00');

m.minute(-30);
m.format('HH:mm:ss'); // 09:30:00

Форматирование после получения компонентов

Извлечённые значения часто используются совместно с format():

const m = moment('2026-05-21 14:05:09.007');

m.format('HH:mm:ss');       // 14:05:09
m.format('HH:mm:ss.SSS');   // 14:05:09.007

Форматирование не влияет на исходный объект, а лишь преобразует его представление.


Использование в вычислениях времени

Полученные компоненты времени применяются для построения логики интервалов:

const start = moment('2026-05-21 08:00:00');
const end = moment('2026-05-21 12:30:00');

const diffMinutes =
  (end.hour() * 60 + end.minute()) -
  (start.hour() * 60 + start.minute());

Такой подход позволяет работать с отдельными частями времени без преобразования в timestamp.


Поведение при изменении границ суток

Изменение часов, минут и секунд может приводить к переходу между датами:

const m = moment('2026-05-21 23:50:00');

m.minute(20);
m.format('YYYY-MM-DD HH:mm:ss'); // 2026-05-22 00:20:00

Пересчёт выполняется автоматически с корректировкой даты, что сохраняет целостность временной шкалы.