Настройка форматов даты и времени

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

Форматирование дат

Для преобразования объекта Moment в строку используется метод format(). В качестве аргумента передается строка формата, состоящая из специальных токенов, каждый из которых отвечает за определенный элемент даты или времени.

Примеры ключевых токенов:

  • Год:

    • YYYY — полный год, например, 2026
    • YY — две последние цифры года, например, 26
  • Месяц:

    • MM — месяц с ведущим нулем (01–12)
    • M — месяц без ведущего нуля (1–12)
    • MMM — сокращенное название месяца, например, “Май”
    • MMMM — полное название месяца, например, “Май”
  • День месяца:

    • DD — день с ведущим нулем (01–31)
    • D — день без ведущего нуля (1–31)
  • День недели:

    • d — номер дня недели (0–6, где 0 — воскресенье)
    • ddd — сокращенное название дня недели, например, “Пн”
    • dddd — полное название дня недели, например, “Понедельник”
  • Часы, минуты и секунды:

    • HH — часы в 24-часовом формате с ведущим нулем (00–23)
    • H — часы без ведущего нуля (0–23)
    • hh — часы в 12-часовом формате с ведущим нулем (01–12)
    • h — часы в 12-часовом формате без ведущего нуля (1–12)
    • mm — минуты с ведущим нулем (00–59)
    • ss — секунды с ведущим нулем (00–59)
    • a / A — обозначение периода дня (am/pm или AM/PM)

Пример форматирования:

const moment = require('moment');
const now = moment();
console.log(now.format('YYYY-MM-DD HH:mm:ss')); // 2026-05-21 14:37:45
console.log(now.format('dddd, MMMM D, YYYY')); // Четверг, Май 21, 2026

Настройка локализации

Moment.js поддерживает локализацию, позволяя отображать даты и времена на различных языках. Для этого используется метод locale().

Пример:

moment.locale('ru');
console.log(moment().format('LLLL')); // четверг, 21 мая 2026 г., 14:37

Доступные форматы локализации включают:

  • L, LL, LLL, LLLL — стандартные локализованные форматы для даты и времени.
  • Формат L обычно выводит дату в виде DD.MM.YYYY, а LLLL включает полное название дня недели, месяца и время.

Кастомизация форматов

Можно создавать сложные кастомные форматы, комбинируя токены и текстовые литералы. Текстовые литералы обрамляются квадратными скобками [], чтобы Moment не пытался интерпретировать их как токены.

Пример:

console.log(moment().format('[Сегодня] dddd, D [числа, месяц] MMMM [года]')); 
// Сегодня четверг, 21 числа, месяц Май года

Парсинг с форматами

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

const dateStr = '21-05-2026 14:37';
const parsedDate = moment(dateStr, 'DD-MM-YYYY HH:mm');
console.log(parsedDate.format('YYYY/MM/DD HH:mm')); // 2026/05/21 14:37

Если формат не совпадает со строкой, Moment возвращает некорректный объект, поэтому точное соответствие формата имеет критическое значение.

Форматы ISO 8601

Moment.js поддерживает стандарт ISO 8601, который широко используется для обмена данными.

  • Пример ISO формата: 2026-05-21T14:37:00Z
  • Для парсинга ISO строк можно использовать:
const isoDate = moment('2026-05-21T14:37:00Z');
console.log(isoDate.format('YYYY-MM-DD HH:mm:ss')); // 2026-05-21 14:37:00

Управление часовой зоной

При работе с форматами важно учитывать часовые пояса. Moment.js позволяет конвертировать время между зонами, используя расширение moment-timezone.

Пример:

const momentTz = require('moment-timezone');
const nyTime = momentTz.tz('2026-05-21 14:37', 'America/New_York');
console.log(nyTime.format('YYYY-MM-DD HH:mm')); // 2026-05-21 14:37

Итоговые рекомендации по форматированию

  • Всегда использовать токены Moment.js для точного вывода даты и времени.
  • Для локализации применять метод locale() и форматы L, LL, LLL, LLLL.
  • Текстовые литералы заключать в квадратные скобки.
  • При парсинге строго следовать формату строки.
  • Для обмена данными между системами отдавать предпочтение ISO 8601.
  • Использовать moment-timezone для работы с часовыми зонами, чтобы избежать ошибок при конвертации.

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