Моки текущей даты

Moment.js предоставляет мощный и удобный инструмент для работы с датами и временем в JavaScript. Одной из ключевых возможностей является получение и манипуляции с текущей датой и временем.

Создание объекта текущей даты

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

const now = moment();
console.log(now.format()); // Вывод в формате ISO 8601

Особенности:

  • По умолчанию создается объект с текущей датой и временем в локальной временной зоне.
  • Форматирование осуществляется через метод .format(), который принимает строку с шаблоном для кастомного вывода.

Форматирование текущей даты

Moment.js поддерживает гибкое форматирование с использованием шаблонов:

const now = moment();
console.log(now.format('YYYY-MM-DD HH:mm:ss')); // 2026-05-22 15:30:45
console.log(now.format('dddd, MMMM Do YYYY, h:mm:ss a')); // Понедельник, Май 22-й 2026, 3:30:45 pm

Ключевые моменты форматирования:

  • YYYY – год в 4 цифры
  • MM – месяц с ведущим нулем
  • DD – день месяца с ведущим нулем
  • HH – часы в 24-часовом формате
  • hh – часы в 12-часовом формате
  • mm – минуты
  • ss – секунды
  • a – am/pm
  • dddd – полное название дня недели
  • MMMM – полное название месяца
  • Do – день месяца с суффиксом (1st, 2nd и т.д.)

Манипуляции с текущей датой

Moment.js позволяет изменять текущую дату, добавлять или вычитать дни, месяцы, годы и другие единицы времени:

const now = moment();
const nextWeek = now.clone().add(7, 'days');
const lastMonth = now.clone().subtract(1, 'months');

console.log(nextWeek.format('YYYY-MM-DD'));
console.log(lastMonth.format('YYYY-MM-DD'));

Важные моменты:

  • Метод .clone() создает копию объекта, чтобы не изменять исходный момент.
  • .add() и .subtract() поддерживают единицы: 'years', 'months', 'weeks', 'days', 'hours', 'minutes', 'seconds'.

Сравнение текущей даты с другой

Для сравнения дат используются методы .isBefore(), .isAfter() и .isSame():

const now = moment();
const future = moment().add(5, 'days');

console.log(now.isBefore(future)); // true
console.log(now.isAfter(future)); // false
console.log(now.isSame(future)); // false

Можно также проверять только по определённым единицам:

console.log(now.isSame(future, 'month')); // true, если оба в одном месяце

Работа с временными зонами

Moment.js поддерживает работу с временными зонами через Moment Timezone. Для текущей даты в UTC используется:

const nowUtc = moment.utc();
console.log(nowUtc.format()); // 2026-05-22T12:30:45Z

Для локальной временной зоны:

const nowLocal = moment().local();
console.log(nowLocal.format());

Особенности:

  • moment.utc() создает дату в UTC.
  • moment().local() преобразует объект UTC в локальную временную зону.

Получение отдельных компонентов даты и времени

Moment.js позволяет легко извлекать отдельные части даты:

const now = moment();

console.log(now.year());   // 2026
console.log(now.month());  // 4 (месяцы считаются с 0)
console.log(now.date());   // 22
console.log(now.day());    // 4 (день недели, 0 – воскресенье)
console.log(now.hour());   // 15
console.log(now.minute()); // 30
console.log(now.second()); // 45

Особенности нумерации:

  • Месяцы нумеруются с 0 (0 — январь, 11 — декабрь).
  • День недели: 0 — воскресенье, 6 — суббота.

Вывод текущей даты в Unix формате

Для получения текущей даты в виде Unix timestamp используется метод .unix():

const now = moment();
console.log(now.unix()); // 1737253845

Для получения в миллисекундах:

console.log(now.valueOf()); // 1737253845000

Автоматическое обновление времени

Moment.js не обновляет объект автоматически. Для получения актуального времени требуется создание нового объекта moment():

setInterval(() => {
  const now = moment();
  console.log(now.format('HH:mm:ss'));
}, 1000);

Этот подход используется для создания часов в реальном времени или таймеров.

Сравнение с нативным Date

Moment.js упрощает работу с датами по сравнению с объектом Date:

  • Унифицированное форматирование
  • Удобные методы добавления и вычитания времени
  • Работа с временными зонами через Moment Timezone
  • Легкое сравнение дат и извлечение отдельных компонентов

Все это делает Moment.js удобным инструментом для получения и манипуляций с текущей датой и временем в любых приложениях на JavaScript.