Moment.js предоставляет мощные возможности для форматирования и локализации дат и времени. Одной из ключевых задач при локализации является управление суффиксами, которые добавляются к отображению временных интервалов, таких как «через 5 минут» или «5 минут назад». В библиотеке Moment.js есть встроенные методы, позволяющие как использовать, так и удалять эти суффиксы.
Суффиксы используются в функциях отображения относительного
времени (fromNow, from,
toNow, to). По умолчанию Moment.js добавляет
суффиксы в зависимости от локали:
moment.locale('ru');
moment().add(5, 'minutes').fromNow(); // "через 5 минут"
moment().subtract(5, 'minutes').fromNow(); // "5 минут назад"
Здесь через и назад — это
суффиксы, которые можно отключать при
необходимости.
Функции from и fromNow принимают
параметр withoutSuffix, который позволяет
выводить только числовое значение и единицу времени без добавления слов
типа «через» или «назад».
const now = moment();
const future = moment().add(10, 'days');
console.log(future.from(now, true)); // "10 дней" без суффикса
console.log(future.fromNow(true)); // "10 дней" без суффикса
true указывает на игнорирование
суффикса.false,
Moment.js автоматически добавит суффикс в соответствии с локалью.Удаление суффиксов особенно важно при создании гибких интерфейсов, где требуется динамическое отображение времени в различных форматах без зависимости от локали.
moment.locale('ru');
const past = moment().subtract(3, 'hours');
console.log(past.fromNow()); // "3 часа назад"
console.log(past.fromNow(true)); // "3 часа" — без суффикса
Здесь fromNow(true) используется для чистого
отображения интервала, а не его относительного положения во
времени.
Иногда необходимо формировать строки с интервалами времени, но без
лишних слов. В таких случаях комбинация методов from и
параметра true является идеальным решением:
function formatDuration(duration) {
return moment.duration(duration).humanize(true); // с суффиксом
}
function formatDurationWithoutSuffix(duration) {
return moment.duration(duration).humanize(false); // без суффикса
}
console.log(formatDuration(moment.duration(2, 'days'))); // "через 2 дня"
console.log(formatDurationWithoutSuffix(moment.duration(2, 'days'))); // "2 дня"
humanize(true) — возвращает строку с суффиксом.humanize(false) — возвращает только числовое значение и
единицу времени без добавления «через» или «назад».from, fromNow,
to, toNow позволяют гибко управлять
отображением времени и могут комбинироваться с параметром
withoutSuffix.Duration
и также принимает параметр для удаления суффикса, что позволяет
использовать его для интерфейсов с динамическим отображением
длительности.moment.locale('ru');
const durations = [
moment.duration(1, 'minute'),
moment.duration(5, 'minutes'),
moment.duration(1, 'hour'),
moment.duration(3, 'hours'),
moment.duration(1, 'day'),
moment.duration(7, 'days')
];
durations.forEach(d => {
console.log(d.humanize()); // с суффиксом
console.log(d.humanize(false)); // без суффикса
});
Удаление суффиксов полезно для:
Комбинируя fromNow(true) или
humanize(false), Moment.js позволяет сохранять
чистоту интерфейса, избегая перегруженных формулировок
с лишними словами.