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

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

Короткий формат даты позволяет отображать только необходимую информацию:

  • день;
  • месяц;
  • год;
  • иногда — только часть даты без времени.

Метод format()

Основной инструмент форматирования дат — метод format().

moment().format('DD.MM.YYYY');

Результат:

21.05.2026

Метод принимает строку-шаблон, где каждый символ отвечает за определённую часть даты.


Основные токены коротких дат

День месяца

Токен Описание Пример
D День без ведущего нуля 3
DD День с ведущим нулём 03
moment().format('D');
moment().format('DD');

Месяц

Токен Описание Пример
M Месяц без нуля 5
MM Месяц с нулём 05
moment().format('M');
moment().format('MM');

Год

Токен Описание Пример
YY Короткий год 26
YYYY Полный год 2026
moment().format('YY');
moment().format('YYYY');

Популярные короткие форматы дат

Европейский формат

moment().format('DD.MM.YYYY');

Результат:

21.05.2026

Короткий год

moment().format('DD.MM.YY');

Результат:

21.05.26

Американский формат

moment().format('MM/DD/YYYY');

Результат:

05/21/2026

ISO-подобный короткий формат

moment().format('YYYY-MM-DD');

Результат:

2026-05-21

Такой формат часто используется:

  • в API;
  • базах данных;
  • URL;
  • JSON;
  • серверных логах.

Использование разделителей

Moment.js позволяет свободно комбинировать разделители.

Точка

moment().format('DD.MM.YYYY');

Слэш

moment().format('DD/MM/YYYY');

Дефис

moment().format('DD-MM-YYYY');

Пробел

moment().format('DD MM YYYY');

Текстовые разделители

moment().format('DD [день] MM [месяц]');

Результат:

21 день 05 месяц

Текст в квадратных скобках не интерпретируется как токен.


Локализованные короткие даты

Moment.js поддерживает локали для автоматического форматирования.

Подключение русской локали

moment.locale('ru');

Локальный короткий формат

moment().format('L');

Результат для русской локали:

21.05.2026

Результат для английской локали:

05/21/2026

Специальные локализованные шаблоны

Формат Описание
L Короткая дата
LL Полная дата
LLL Дата и время
LLLL Полный формат

Пример:

moment().format('L');

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

Создание даты

const date = moment('2026-12-07');

Вывод короткой даты

date.format('DD.MM.YY');

Результат:

07.12.26

Форматирование даты из объекта Date

const nativeDate = new Date();

moment(nativeDate).format('DD.MM.YYYY');

Форматирование Unix Timestamp

Timestamp в секундах

moment.unix(1716278400).format('DD.MM.YYYY');

Timestamp в миллисекундах

moment(1716278400000).format('DD.MM.YYYY');

Ведущие нули

Короткие даты почти всегда используют ведущие нули.

Без ведущих нулей

moment().format('D.M.YYYY');

Результат:

3.5.2026

С ведущими нулями

moment().format('DD.MM.YYYY');

Результат:

03.05.2026

Комбинирование даты и времени

Даже в компактных форматах часто требуется короткое время.

moment().format('DD.MM.YYYY HH:mm');

Результат:

21.05.2026 14:35

Короткие форматы времени

Токен Значение
HH Часы
mm Минуты
ss Секунды

Форматирование только месяца и года

Иногда отображается только часть даты.

moment().format('MM.YYYY');

Результат:

05.2026

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

moment().format('DD.MM');

Результат:

21.05

Сокращённые названия месяцев

Токен Пример
MMM май
MMMM май / мая
moment.locale('ru');

moment().format('DD MMM');

Результат:

21 мая

Проверка корректности даты перед форматированием

Перед выводом даты рекомендуется проверять её валидность.

const date = moment('invalid-date');

date.isValid();

Результат:

false

Безопасное форматирование

const date = moment(userDate);

const result = date.isValid()
    ? date.format('DD.MM.YYYY')
    : 'Некорректная дата';

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

const dates = [
    '2026-01-10',
    '2026-02-15',
    '2026-03-20'
];

const formatted = dates.map(date =>
    moment(date).format('DD.MM.YYYY')
);

console.log(formatted);

Результат:

[
  '10.01.2026',
  '15.02.2026',
  '20.03.2026'
]

Форматирование в таблицах

const users = [
    {
        name: 'Alex',
        createdAt: '2026-05-21'
    }
];

users.forEach(user => {
    console.log(
        moment(user.createdAt).format('DD.MM.YYYY')
    );
});

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

moment().format('DD.MM.YYYY');

Форматирование вчерашней даты

moment()
    .subtract(1, 'day')
    .format('DD.MM.YYYY');

Форматирование завтрашней даты

moment()
    .add(1, 'day')
    .format('DD.MM.YYYY');

Использование localeData()

Получение локальных шаблонов:

moment.localeData().longDateFormat('L');

Результат:

DD.MM.YYYY

Форматирование с учётом часового пояса

При использовании плагина Moment Timezone:

moment()
    .tz('Europe/Moscow')
    .format('DD.MM.YYYY');

Частые ошибки

Перепутаны MM и mm

moment().format('DD.mm.YYYY');

Ошибка:

  • mm — минуты;
  • MM — месяц.

Правильно:

moment().format('DD.MM.YYYY');

Использование YY вместо YYYY

moment().format('DD.MM.YY');

Результат:

21.05.26

Если требуется полный год:

moment().format('DD.MM.YYYY');

Форматирование невалидной даты

moment('abc').format('DD.MM.YYYY');

Результат:

Invalid date

Практические шаблоны

Для интерфейсов

DD.MM.YYYY

Для API

YYYY-MM-DD

Для мобильных приложений

DD.MM.YY

Для административных панелей

DD.MM.YYYY HH:mm

Сравнение форматов

Формат Пример Назначение
DD.MM.YYYY 21.05.2026 Интерфейсы
DD.MM.YY 21.05.26 Компактный вывод
YYYY-MM-DD 2026-05-21 API
MM/DD/YYYY 05/21/2026 США
DD MMM 21 мая Человеко-читаемый формат

Кастомные короткие форматы

function shortDate(date) {
    return moment(date).format('DD.MM.YY');
}

console.log(
    shortDate('2026-05-21')
);

Использование в React

function UserCard({ user }) {
    return (
        <div>
            {moment(user.createdAt)
                .format('DD.MM.YYYY')}
        </div>
    );
}

Использование в Vue

methods: {
    formatDate(date) {
        return moment(date)
            .format('DD.MM.YYYY');
    }
}

Использование в Node.js

const moment = require('moment');

const date = moment()
    .format('DD.MM.YYYY');

console.log(date);

Производительность при массовом форматировании

При работе с большими массивами дат форматирование может вызывать дополнительные расходы памяти и CPU.

Пример пакетной обработки:

const formatted = data.map(item => ({
    ...item,
    date: moment(item.date)
        .format('DD.MM.YYYY')
}));

Для высоконагруженных систем рекомендуется:

  • минимизировать повторные вызовы moment();
  • избегать лишнего создания объектов;
  • использовать кеширование шаблонов;
  • по возможности переходить на более современные решения (Intl.DateTimeFormat, Day.js, Luxon).

Краткая таблица токенов

Токен Значение
D День
DD День с нулём
M Месяц
MM Месяц с нулём
YY Короткий год
YYYY Полный год
H Час
HH Час с нулём
m Минуты
mm Минуты с нулём
s Секунды
ss Секунды с нулём
L Локальная короткая дата