166 votes

Moment.js - comment obtenir le nombre d'années écoulées depuis une date, non arrondi à l'unité supérieure ?

J'essaie de calculer l'âge d'une personne en utilisant Moment.js mais je trouve que l'outil, par ailleurs utile. à partir de maintenant La méthode arrondit les années. Par exemple, si nous sommes le 27/12/2012 et que la date de naissance de la personne est le 26/02/1978, moment("02/26/1978", "MM/DD/YYYY").fromNow() retourne "il y a 35 ans". Comment puis-je faire en sorte que Moment.js ignore le nombre de mois, et renvoie simplement le nombre d'années (c'est-à-dire 34) depuis la date ?

287voto

ebeltran Points 246

Utiliser moment.js est aussi simple que :

var years = moment().diff('1981-01-01', 'years');
var days = moment().diff('1981-01-01', 'days');

Pour une référence supplémentaire, vous pouvez lire moment.js documentation officielle .

45voto

Blizzard Points 141

http://jsfiddle.net/xR8t5/27/

si vous ne voulez pas de valeurs fractionnées :

var years = moment().diff('1981-01-01', 'years',false);
alert( years);

si vous voulez des valeurs fractionnées :

var years = moment().diff('1981-01-01', 'years',true);
alert( years);

Les unités peuvent être [secondes, minutes, heures, jours, semaines, mois, années].

24voto

user4815162342 Points 604

Il semble qu'il y ait un fonction de différence qui accepte les intervalles de temps à utiliser ainsi qu'une option pour pas arrondir le résultat. Donc, quelque chose comme

Math.floor(moment(new Date()).diff(moment("02/26/1978","MM/DD/YYYY"),'years',true)))

Je n'ai pas essayé et je ne suis pas totalement familiarisé avec le moment, mais il semble que cela devrait vous permettre d'obtenir ce que vous voulez (sans avoir à réinitialiser le mois).

14voto

user2327748 Points 149

Cette méthode est facile et puissante.

La valeur est une date et "DD-MM-YYYY" est le masque de la date.

moment().diff(moment(value, "DD-MM-YYYY"), 'years');

13voto

aknuds1 Points 9918

J'ai constaté qu'il était possible de réinitialiser le mois à janvier pour les deux dates (la date fournie et la date actuelle) :

> moment("02/26/1978", "MM/DD/YYYY").month(0).from(moment().month(0))
"34 years ago"

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X