Moment.js-我如何得到一次约会后的年数,而不是四舍五入?

我试图用 等一下来计算一个人的年龄,但是我发现其他方面有用的 从现在开始方法可以计算年龄。例如,如果今天是2012年12月27日,出生日期是1978年2月26日,那么 moment("02/26/1978", "MM/DD/YYYY").fromNow()返回“35年前”。我怎样才能让 Moment.js 忽略月份数,只返回自日期起的年份数(即34) ?

162630 次浏览

我发现将两个日期(提供的日期和现在)的月份重置为1月份是可行的:

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

似乎有一个 差分函数,接受使用的时间间隔以及一个选项 没有周围的结果。比如说

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

我还没有尝试过这个,我也不是很熟悉这个时刻,但是看起来这个应该可以得到你想要的(不需要重置月份)。

这个方法对我很有效。它会检查这个人今年是否过生日,然后再减去一年。

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

编辑: 第一个版本不能很好地工作。更新的版本应该可以

使用 Moment.js 就像下面这样简单:

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

作为额外的参考,您可以阅读 Moment.js 正式文件

试试这个:

 moment("02/26/1978", "MM/DD/YYYY").fromNow().split(" ")[0];

说明:

我们收到类似这样的字符串: “23天前”。将它拆分为数组: [‘23’,‘ days’,‘ ago’] ,然后取第一个项目‘23’。

如果您不想使用任何模块进行年龄计算

var age = Math.floor((new Date() - new Date(date_of_birth)) / 1000 / 60 / 60 / 24 / 365.25)

Http://jsfiddle.net/xr8t5/27/

如果不需要分数值:

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

如果你想要分数值:

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

单位可以是[秒,分钟,小时,天,星期,月,年]

这种方法简单有效。

值是一个日期,而“ DD-MM-YYYY”是日期的掩码。

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

当你想显示年份和剩余的日子:

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

我更喜欢这个小方法。

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

使用 瞬间库获取 yearsdays

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

下面是一个使用 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);

你可以试试这个:

moment
.duration({
years: moment(Date.now()).diff(datetime, "years", false),
})
.humanize()