J'essaie de calculer l'âge d'une personne à l'aide de Moment.js , mais je constate que la méthode autrement utile from Now 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()
renvoie '35 years ago '. Comment 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?
J'ai trouvé qu'il serait utile de remettre le mois à janvier pour les deux dates (la date fournie et le présent):
> moment("02/26/1978", "MM/DD/YYYY").month(0).from(moment().month(0))
"34 years ago"
Utiliser moment.js est aussi simple que:
var years = moment().diff('1981-01-01', 'years');
var days = moment().diff('1981-01-01', 'days');
Pour plus de références, vous pouvez lire moment.js documentation officielle .
si vous ne voulez pas de valeurs de fraction:
var years = moment().diff('1981-01-01', 'years',false);
alert( years);
si vous voulez des valeurs de fraction:
var years = moment().diff('1981-01-01', 'years',true);
alert( years);
Les unités peuvent être [secondes, minutes, heures, jours, semaines, mois, années]
Il semble y avoir une fonction difference qui accepte les intervalles de temps à utiliser, ainsi qu'une option pour non 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é cela, et je ne suis pas complètement au courant du moment, mais il semble que cela devrait obtenir ce que vous voulez (sans avoir à réinitialiser le mois).
Cette méthode est facile et puissante.
La valeur est une date et "JJ-MM-AAAA" est le masque de la date.
moment().diff(moment(value, "DD-MM-YYYY"), 'years');
Essaye ça:
moment("02/26/1978", "MM/DD/YYYY").fromNow().split(" ")[0];
Explication:
Nous recevons une chaîne comme celle-ci: '23 jours auparavant'. Divisez-le en tableau: ['23', 'days', 'ago'] puis prenez le premier élément '23'.
Si vous ne voulez utiliser aucun module pour le calcul de l'âge
var age = Math.floor((new Date() - new Date(date_of_birth)) / 1000 / 60 / 60 / 24 / 365.25)
Cette méthode fonctionne pour moi. Il vérifie si la personne a eu son anniversaire cette année et soustrait un an sinon.
// date is the moment you're calculating the age of
var now = moment().unix();
var then = date.unix();
var diff = (now - then) / (60 * 60 * 24 * 365);
var years = Math.floor(diff);
Edit: La première version ne fonctionnait pas parfaitement. La mise à jour devrait
Lorsque vous souhaitez afficher les années et les jours restants:
var m = moment(d.birthday.date, "DD.MM.YYYY");
var years = moment().diff(m, 'years', false);
var days = moment().diff(m.add(years, 'years'), 'days', false);
alert(years + ' years, ' + days + ' days');
Je préfère cette petite méthode.
function getAgeFromBirthday(birthday) {
if(birthday){
var totalMonths = moment().diff(birthday, 'months');
var years = parseInt(totalMonths / 12);
var months = totalMonths % 12;
if(months !== 0){
return parseFloat(years + '.' + months);
}
return years;
}
return null;
}