J'ai essayé cela en moment.js
moment.duration(375,'days').humanize()
et obtenez "un an" comme réponse, mais je m'attendrais à "un an et 10 jours". Existe-t-il un moyen de récupérer pleinement la valeur humanisée?
J'ai trouvé cette petite bibliothèque, qui affiche uniquement la durée (si vous n'avez pas vraiment besoin de toutes les fonctionnalités de moment.js)
Moment.js fournit la fonction fromNow
pour obtenir des durées en lecture, voir http://momentjs.com/docs/#/displaying/fromnow/
Exemple:
moment([2007, 0, 29]).fromNow(); // 4 years ago
moment().subtract(375, 'days').fromNow(); // a year ago
Vous devez utiliser une bibliothèque tierce comme suggéré par @Fluffy
J'examinais le même problème et il semble qu'il n'y ait aucun plan pour le soutenir dans le futur ...
Une solution de contournement proposée consiste à créer une définition de langage qui remplace} la mise en œuvre par défaut des messages humanisés:
https://github.com/timrwood/moment/issues/348
Un peu exagéré si vous me demandez ...
Essayez ce plugin:
https://github.com/jsmreese/moment-duration-format
moment.duration(123, "minutes").format("h [hrs], m [min]");
// "2 hrs, 3 min"
Utilisez moment.relativeTimeThreshold('y', 365)
pour définir l’arrondi.
moment.relativeTimeThreshold('s', 60);
moment.relativeTimeThreshold('m', 60);
moment.relativeTimeThreshold('h', 24);
moment.relativeTimeThreshold('d', 31);
moment.relativeTimeThreshold('M', 12);
moment.relativeTimeThreshold('y', 365);
C'est ma solution, je l'aime mieux que les autres ici:
val moment1 = moment();
val moment2 = mement();
console.log(moment.duration(moment1.diff(moment2)).humanize());
j'ai écrit ce code javascript pour humaniser la durée,
function humanizeDuration(timeInMillisecond) {
var result = "";
if (timeInMillisecond) {
if ((result = Math.round(timeInMillisecond / (1000 * 60 * 60 * 24 * 30 * 12))) > 0) {//year
result = result === 1 ? result + " Year" : result + " Years";
} else if ((result = Math.round(timeInMillisecond / (1000 * 60 * 60 * 24 * 30))) > 0) {//months
result = result === 1 ? result + " Month" : result + " Months";
} else if ((result = Math.round(timeInMillisecond / (1000 * 60 * 60 * 24))) > 0) {//days
result = result === 1 ? result + " Day" : result + " Days";
} else if ((result = Math.round(timeInMillisecond / (1000 * 60 * 60))) > 0) {//Hours
result = result === 1 ? result + " Hours" : result + " Hours";
} else if ((result = Math.round(timeInMillisecond / (1000 * 60))) > 0) {//minute
result = result === 1 ? result + " Minute" : result + " Minutes";
} else if ((result = Math.round(timeInMillisecond / 1000)) > 0) {//second
result = result === 1 ? result + " Second" : result + " Seconds";
} else {
result = timeInMillisecond + " Millisec";
}
}
return result;
}
Voici ma solution sur CoffeeScript:
humanizeDuration = (eventDuration)->
eventMDuration = Moment.duration(eventDuration, 'seconds');
eventDurationString = ""
if (eventMDuration.days() > 0)
eventDurationString += " " + Moment.duration(eventMDuration.days(), 'days').humanize()
if (eventMDuration.hours() > 0)
eventDurationString += " " + Moment.duration(eventMDuration.hours(), 'hours').humanize()
if (eventMDuration.minutes() > 0)
eventDurationString += " " + Moment.duration(eventMDuration.minutes(), 'minutes').humanize()
eventDurationString.trim()
Ce numéro sur Github contient beaucoup de discussions à ce sujet. Beaucoup demandent une option humanisée plus précise.
Décrivez pourquoi vous en avez besoin, les cas d'utilisation, etc.