Moment: <moment minutes="" ago="">.from (moment ()) // возвращает "час назад"</moment>

Созданный на 7 окт. 2014  ·  4Комментарии  ·  Источник: moment/moment

Спасибо за отличную библиотеку.

Одна проблема, с которой я столкнулся, заключается в том, что 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);
    }

Самый полезный комментарий

Фактически вы можете установить порог времени, который вы хотите установить, как показано здесь в документации .

Если вы всегда хотите отображать полное время, вы можете установить более точные пороговые значения:

// 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);

Все 4 Комментарий

В частности, это можно запустить, чтобы проиллюстрировать проблему:

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 часа».

В идеале я бы хотел, чтобы строковый вывод отображал две наиболее значимые смежные единицы. Несколько примеров:

  • 1 час 56 минут 7 секунд -> «один час 56 минут»
  • 4 часа 56 секунд -> «четыре часа»
  • 2 дня, 56 минут -> «два дня»
  • 2 дня, 1 час, 1 минута -> «два дня и один час»

Будет ли такое поведение желательным для moment.js или оно слишком сильно отличается от целевых вариантов использования библиотеки?

Это так называемый «формат продолжительности», который сам по себе является очень и очень сложной темой. tl; dr это то, что не реализовано в ядре, но вот способы добиться того, чего вы хотите, вручную или с помощью плагинов. Вы можете попробовать прочитать: https://github.com/moment/moment/issues/1048 или напрямую использовать: https://github.com/jsmreese/moment-duration-format.

Была ли эта страница полезной?
0 / 5 - 0 рейтинги

Смежные вопросы

danieljsinclair picture danieljsinclair  ·  3Комментарии

RobinvanderVliet picture RobinvanderVliet  ·  3Комментарии

alvarotrigo picture alvarotrigo  ·  3Комментарии

ninigix picture ninigix  ·  3Комментарии

tanepiper picture tanepiper  ·  3Комментарии