Спасибо за отличную библиотеку.
Одна проблема, с которой я столкнулся, заключается в том, что from () округляет продолжительность> = 45 минут до часа. Остальные единицы (секунды, дни и т. Д.) Также округляются. В нашем приложении мы хотели бы быть более точными, чем это. Я считаю, что функция, указанная ниже, выполняет округление. Что было бы подходящим решением, чтобы при желании удалить округление? Спасибо!
function relativeTime(milliseconds, withoutSuffix, lang) {
var seconds = round(Math.abs(milliseconds) / 1000),
minutes = round(seconds / 60),
hours = round(minutes / 60),
days = round(hours / 24),
years = round(days / 365),
args = seconds < 45 && ['s', seconds] ||
minutes === 1 && ['m'] ||
minutes < 45 && ['mm', minutes] ||
hours === 1 && ['h'] ||
hours < 22 && ['hh', hours] ||
days === 1 && ['d'] ||
days <= 25 && ['dd', days] ||
days <= 45 && ['M'] ||
days < 345 && ['MM', round(days / 30)] ||
years === 1 && ['y'] || ['yy', years];
args[2] = withoutSuffix;
args[3] = milliseconds > 0;
args[4] = lang;
return substituteTimeAgo.apply({}, args);
}
В частности, это можно запустить, чтобы проиллюстрировать проблему:
moment().subtract(45, 'minutes').from(moment())
Фактически вы можете установить порог времени, который вы хотите установить, как показано здесь в документации .
Если вы всегда хотите отображать полное время, вы можете установить более точные пороговые значения:
// Set thresholds to be at their "max" value
moment.relativeTimeThreshold('s', 59);
moment.relativeTimeThreshold('m', 59);
moment.relativeTimeThreshold('h', 23);
moment.relativeTimeThreshold('d', 28);
moment.relativeTimeThreshold('M', 12);
Большое спасибо. Могу ли я отобразить 75-минутную продолжительность как «час 15 минут», а не как «час»? Тот же вопрос для 90 минут -> «2 часа».
В идеале я бы хотел, чтобы строковый вывод отображал две наиболее значимые смежные единицы. Несколько примеров:
Будет ли такое поведение желательным для moment.js или оно слишком сильно отличается от целевых вариантов использования библиотеки?
Это так называемый «формат продолжительности», который сам по себе является очень и очень сложной темой. tl; dr это то, что не реализовано в ядре, но вот способы добиться того, чего вы хотите, вручную или с помощью плагинов. Вы можете попробовать прочитать: https://github.com/moment/moment/issues/1048 или напрямую использовать: https://github.com/jsmreese/moment-duration-format.
Самый полезный комментарий
Фактически вы можете установить порог времени, который вы хотите установить, как показано здесь в документации .
Если вы всегда хотите отображать полное время, вы можете установить более точные пороговые значения: