Порядковые числительные

Библиотека Moment.js предоставляет удобный способ работы с датами и временем в JavaScript, включая форматирование дат с использованием порядковых числительных, таких как “1-й”, “2-й”, “3-й” и так далее. Порядковые числительные полезны при отображении дат в человекочитаемом формате, особенно в контексте календарей, отчетов и пользовательских интерфейсов.


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

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

const moment = require('moment');

const date = moment('2026-05-21');
console.log(date.format('Do MMMM YYYY')); // "21-й мая 2026"

Разбор формата:

  • D – день месяца без ведущего нуля (1–31).
  • Do – день месяца с порядковым числительным.
  • MMMM – полное название месяца.
  • YYYY – год в 4 цифры.

Do автоматически подставляет правильное окончание для дня месяца в зависимости от локали.


Работа с локалями

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

require('moment/locale/ru');
moment.locale('ru');

console.log(moment('2026-05-21').format('Do MMMM YYYY')); // "21-й мая 2026"

Особенности русской локали:

  • Окончания для чисел формируются автоматически: “1-й”, “2-й”, “3-й”, “4-й” и т.д.
  • При смене локали на английскую результат будет в форме: “21st May 2026”.
  • Локаль влияет не только на порядковые числительные, но и на названия месяцев и дней недели.

Пользовательское определение порядковых числительных

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

moment.updateLocale('ru', {
    ordinal: function (number) {
        return number + (number === 1 ? '-й' : '-й');
    }
});

console.log(moment('2026-05-01').format('Do MMMM YYYY')); // "1-й мая 2026"

Объяснение:

  • Метод updateLocale позволяет изменить правила форматирования конкретной локали.
  • Свойство ordinal должно быть функцией, возвращающей строку с корректным порядковым числительным.
  • Можно использовать условные конструкции для уникальных правил, например, если требуется особое оформление для первых десяти чисел месяца.

Комбинация с другими форматами

Порядковые числительные можно комбинировать с временем, днями недели и часами.

console.log(moment('2026-05-21T15:30').format('dddd, Do MMMM YYYY, HH:mm')); 
// "четверг, 21-й мая 2026, 15:30"

Элементы формата:

  • dddd – полное название дня недели.
  • HH:mm – часы и минуты в 24-часовом формате.
  • Do – порядковое числительное для дня месяца.

Это позволяет строить полные человекочитаемые даты с точным временем.


Примеры практического использования

  1. Календарные приложения:
const calendarDate = moment().format('Do MMMM');
console.log(calendarDate); // "21-й мая"
  1. Отчеты и документы:
const reportDate = moment().format('DD.MM.YYYY');
const displayDate = moment().format('Do MMMM YYYY');
console.log(`Дата отчета: ${displayDate}`); // "Дата отчета: 21-й мая 2026"
  1. Комбинирование с интервалами:
const start = moment('2026-05-01');
const end = moment('2026-05-21');

console.log(`Период: ${start.format('Do')} – ${end.format('Do MMMM YYYY')}`);
// "Период: 1-й – 21-й мая 2026"

Автоматическое определение порядковых чисел для любых чисел

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

  • Числа от 1 до 20 – индивидуальные окончания.
  • Дальше – на основе последней цифры.

Это гарантирует корректность в любом диапазоне дней месяца без ручного вмешательства.


Итоговые рекомендации по использованию

  • Для русской локали всегда подключать 'moment/locale/ru' и устанавливать moment.locale('ru').
  • Использовать Do для порядковых числительных, а D – для чисел без окончания.
  • Для уникальных форматов можно изменять локаль через updateLocale.
  • Комбинировать с другими форматами даты и времени для создания человекочитаемых строк.

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