Moment: <moment minutes="" ago="">.from (moment ()) // retorna 'uma hora atrás'</moment>

Criado em 7 out. 2014  ·  4Comentários  ·  Fonte: moment/moment

Obrigado pela ótima biblioteca.

Um problema que encontrei é que from () arredondará durações de> = 45 minutos até uma hora. Outras unidades (segundos, dias, etc.) também são arredondadas. Em nosso aplicativo, gostaríamos de ser um pouco mais precisos do que isso. Acredito que a função listada abaixo faça o arredondamento. Qual seria uma solução apropriada para remover opcionalmente o arredondamento? Obrigado!

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

Comentários muito úteis

Você pode definir o limite de tempo que deseja definir, conforme visto aqui na documentação .

Se você sempre deseja exibir o tempo inteiro, pode definir seus limites para serem mais precisos:

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

Todos 4 comentários

Especificamente, isso pode ser executado para ilustrar o problema:

moment().subtract(45, 'minutes').from(moment())

Você pode definir o limite de tempo que deseja definir, conforme visto aqui na documentação .

Se você sempre deseja exibir o tempo inteiro, pode definir seus limites para serem mais precisos:

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

Ótimo, obrigado. Existe alguma maneira de exibir uma duração de 75 minutos como 'uma hora e 15 minutos', em vez de 'uma hora'? Mesma pergunta por 90 minutos -> '2 horas'.

O ideal é que a saída da string mostre as duas unidades contíguas mais significativas. Alguns exemplos:

  • 1 hora, 56 minutos, 7 segundos -> 'uma hora e 56 minutos'
  • 4 horas, 56 segundos -> 'quatro horas'
  • 2 dias, 56 minutos -> 'dois dias'
  • 2 dias, 1 hora, 1 minuto -> 'dois dias e uma hora'

Esse comportamento seria desejado para moment.js ou diverge muito dos casos de uso de destino da biblioteca?

Este é o chamado "formato de duração", que é um tópico muito, muito complicado por si só. tl; dr é algo que não está implementado no núcleo, mas aqui estão algumas maneiras de conseguir o que você deseja manualmente ou com plug-ins. Você pode tentar ler: https://github.com/moment/moment/issues/1048 ou usar diretamente: https://github.com/jsmreese/moment-duration-format.

Esta página foi útil?
0 / 5 - 0 avaliações