Moment: <moment minutes="" ago="">.from (moment ()) // devuelve 'hace una hora'</moment>

Creado en 7 oct. 2014  ·  4Comentarios  ·  Fuente: moment/moment

Gracias por la gran biblioteca.

Un problema con el que me he encontrado es que from () redondeará duraciones> = 45 minutos hasta una hora. Otras unidades (segundos, días, etc.) también se redondean. En nuestra aplicación nos gustaría ser un poco más precisos que esto. Creo que la función que se enumera a continuación realiza el redondeo. ¿Cuál sería una solución adecuada para eliminar opcionalmente el redondeo? ¡Gracias!

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

Comentario más útil

De hecho, puede establecer el umbral de tiempo en el que desea que se establezca, como se ve aquí en la documentación .

Si siempre desea mostrar el tiempo completo, puede establecer sus umbrales para que sean más 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 comentarios

Específicamente, esto se puede ejecutar para ilustrar el problema:

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

De hecho, puede establecer el umbral de tiempo en el que desea que se establezca, como se ve aquí en la documentación .

Si siempre desea mostrar el tiempo completo, puede establecer sus umbrales para que sean más 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);

Muchas gracias. ¿Hay alguna forma de mostrar una duración de 75 minutos como "una hora y 15 minutos", en lugar de "una hora"? La misma pregunta durante 90 minutos -> '2 horas'.

Idealmente, me gustaría que la salida de la cadena muestre las dos unidades contiguas más significativas. Algunos ejemplos:

  • 1 hora, 56 minutos, 7 segundos -> 'una hora y 56 minutos'
  • 4 horas, 56 segundos -> 'cuatro horas'
  • 2 días, 56 minutos -> 'dos ​​días'
  • 2 días, 1 hora, 1 minuto -> 'dos ​​días y una hora'

¿Se desearía este comportamiento para moment.js, o difiere demasiado de los casos de uso de destino de la biblioteca?

Este es el llamado "formato de duración", que es un tema muy, muy complicado en sí mismo. tl; dr es algo que no está implementado en el núcleo, pero aquí hay formas de lograr lo que desea manualmente o con complementos. Puede intentar leer: https://github.com/moment/moment/issues/1048 o usar directamente: https://github.com/jsmreese/moment-duration-format.

¿Fue útil esta página
0 / 5 - 0 calificaciones