Moment: <moment minutes="" ago="">.from(moment()) // renvoie 'il y a une heure'</moment>

Créé le 7 oct. 2014  ·  4Commentaires  ·  Source: moment/moment

Merci pour la grande bibliothèque.

Un problème que j'ai rencontré est que from() arrondira les durées >= 45 minutes jusqu'à une heure. Les autres unités (secondes, jours, etc.) sont également arrondies. Dans notre application, nous aimerions être un peu plus précis que cela. Je crois que la fonction énumérée ci-dessous fait l'arrondi. Quelle serait une solution appropriée pour éventuellement supprimer les arrondis ? Merci!

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

Commentaire le plus utile

Vous pouvez en fait définir le seuil de temps auquel vous souhaitez qu'il soit défini, comme indiqué ici dans la documentation .

Si vous souhaitez toujours afficher le temps plein, vous pouvez définir vos seuils pour être plus précis :

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

Tous les 4 commentaires

Plus précisément, cela peut être exécuté afin d'illustrer le problème :

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

Vous pouvez en fait définir le seuil de temps auquel vous souhaitez qu'il soit défini, comme indiqué ici dans la documentation .

Si vous souhaitez toujours afficher le temps plein, vous pouvez définir vos seuils pour être plus précis :

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

Grand merci. Y a-t-il un moyen pour moi d'afficher une durée de 75 minutes sous la forme "une heure et 15 minutes", plutôt que "une heure" ? Même question pendant 90 minutes -> '2 heures'.

Idéalement, j'aimerais que la sortie de chaîne affiche les deux unités contiguës les plus importantes. Quelques exemples :

  • 1 heure, 56 minutes, 7 secondes -> 'une heure et 56 minutes'
  • 4 heures, 56 secondes -> 'quatre heures'
  • 2 jours, 56 minutes -> 'deux jours'
  • 2 jours, 1 heure, 1 minute -> 'deux jours et une heure'

Ce comportement serait-il souhaité pour moment.js, ou s'écarte-t-il trop des cas d'utilisation cibles de la bibliothèque ?

C'est ce qu'on appelle le "format de durée" qui est un sujet très, très compliqué en soi. tl; dr c'est quelque chose qui n'est pas implémenté dans le noyau, mais voici des moyens d'obtenir ce que vous voulez manuellement ou avec des plugins. Vous pouvez essayer de lire : https://github.com/moment/moment/issues/1048 ou utiliser directement : https://github.com/jsmreese/moment-duration-format.

Cette page vous a été utile?
0 / 5 - 0 notes