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