admin管理员组文章数量:1129154
I'm trying to calculate a person's age using Moment.js, but I'm finding that the otherwise useful fromNow method rounds up the years. For instance, if today is 12/27/2012 and the person's birth date is 02/26/1978, moment("02/26/1978", "MM/DD/YYYY").fromNow()
returns '35 years ago'. How can I make Moment.js ignore the number of months, and simply return the number of years (i.e. 34) since the date?
I'm trying to calculate a person's age using Moment.js, but I'm finding that the otherwise useful fromNow method rounds up the years. For instance, if today is 12/27/2012 and the person's birth date is 02/26/1978, moment("02/26/1978", "MM/DD/YYYY").fromNow()
returns '35 years ago'. How can I make Moment.js ignore the number of months, and simply return the number of years (i.e. 34) since the date?
13 Answers
Reset to default 307Using moment.js is as easy as:
var years = moment().diff('1981-01-01', 'years');
var days = moment().diff('1981-01-01', 'days');
For additional reference, you can read moment.js official documentation.
http://jsfiddle.net/xR8t5/27/
if you do not want fraction values:
var years = moment().diff('1981-01-01', 'years',false);
alert( years);
if you want fraction values:
var years = moment().diff('1981-01-01', 'years',true);
alert( years);
Units can be [seconds, minutes, hours, days, weeks, months, years]
There appears to be a difference function that accepts time intervals to use as well as an option to not round the result. So, something like
Math.floor(moment(new Date()).diff(moment("02/26/1978","MM/DD/YYYY"),'years',true)))
I haven't tried this, and I'm not completely familiar with moment, but it seems like this should get what you want (without having to reset the month).
This method is easy and powerful.
Value is a date and "DD-MM-YYYY" is the mask of the date.
moment().diff(moment(value, "DD-MM-YYYY"), 'years');
I found that it would work to reset the month to January for both dates (the provided date and the present):
> moment("02/26/1978", "MM/DD/YYYY").month(0).from(moment().month(0))
"34 years ago"
Try this:
moment("02/26/1978", "MM/DD/YYYY").fromNow().split(" ")[0];
Explanation:
We receive string something like this: '23 days ago'. Split it to array: ['23', 'days', 'ago'] and then take first item '23'.
This method works for me. It's checking if the person has had their birthday this year and subtracts one year otherwise.
// 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: First version didn't quite work perfectly. The updated one should
If you dont want to use any module for age calculation
var age = Math.floor((new Date() - new Date(date_of_birth)) / 1000 / 60 / 60 / 24 / 365.25)
When you want to show years and the remaining days:
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');
Get years
and days
using moment.js library
import moment from 'moment'
export function getAge(dateString: string) {
const date = moment(dateString, 'YYYY-MM-DD')
const years = moment().diff(date, 'years')
const days = moment().diff(date.add(years, 'years'), 'days', false)
return { years, days }
}
const birthDate = "1997-04-01T00:00:00.000Z";
const age = getAge(birthDate);
// Today is 2022-04-09
console.log({ age })
// Result: { age: { years: 25, days: 8 } }
You can try this:
moment
.duration({
years: moment(Date.now()).diff(datetime, "years", false),
})
.humanize()
I prefer this small method.
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;
}
Here is the simple one using moment.js
let dt = dob;
let age = '';
let bY = Number(moment(dt).format('YYYY'));
let bM = Number(moment(dt).format('MM'));
let bD = Number(moment(dt).format('DD'));
let tY = Number(moment().format('YYYY'));
let tM = Number(moment().format('MM'));
let tD = Number(moment().format('DD'));
age += (tY - bY) + ' Y ';
if (tM < bM) {
age += (tM - bM + 12) + ' M ';
tY = tY - 1;
} else {
age += (tM - bM) + ' M '
}
if (tD < bD) {
age += (tD - bD + 30) + ' D ';
tM = tM - 1;
} else {
age += (tD - bD) + ' D '
}
//AGE MONTH DAYS
console.log(age);
本文标签: javascriptMomentjshow do I get the number of years since a datenot rounded upStack Overflow
版权声明:本文标题:javascript - Moment.js - how do I get the number of years since a date, not rounded up? - Stack Overflow 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.betaflare.com/web/1736739326a1950420.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论