Библиотека 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"
Особенности русской локали:
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 – порядковое числительное для дня
месяца.Это позволяет строить полные человекочитаемые даты с точным временем.
const calendarDate = moment().format('Do MMMM');
console.log(calendarDate); // "21-й мая"
const reportDate = moment().format('DD.MM.YYYY');
const displayDate = moment().format('Do MMMM YYYY');
console.log(`Дата отчета: ${displayDate}`); // "Дата отчета: 21-й мая 2026"
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 внутри локалей использует метод, который правильно обрабатывает любые числа:
Это гарантирует корректность в любом диапазоне дней месяца без ручного вмешательства.
'moment/locale/ru'
и устанавливать moment.locale('ru').Do для порядковых
числительных, а D – для чисел без
окончания.updateLocale.Понимание этих принципов позволяет создавать гибкие и корректные отображения дат в приложениях, где важна локализация и правильная типографика порядковых чисел.