如何使用Moment.js在X天内获得我的年龄?

时间:2016-01-05 20:21:12

标签: javascript date momentjs

我目前的代码是

function ageInNDays(days) {
  return moment.duration(
    moment('1990-10-10').diff(
    moment().add(days, 'days'))
  );
}

.add(days, 'days')到今天,然后将它与过去的某个日期区分开来。但是,moment.duration并不总是返回通过的日历年数。它将一年定义为365天,并返回这些年中已经过了多少年。

编辑:我仍然在寻找我的年龄。也许如果可能的话,像20年,5个月和10天的格式类似于moment.duration()的样子。

如果我的生日是1992年3月5日,那么我的年龄只会在3月5日日历过去时增加。我的剩余年龄只能在每个月的第5天过去时重置。

EDIT2:我现在唯一的想法是

age = moment().add(days, 'days').year() - moment('1995-01-05').year()
if ((today's date + added days) < birthday's date)
  --age

3 个答案:

答案 0 :(得分:1)

如果你真的在寻找几天的年龄,你可以使用:

moment.duration(moment() - moment('1990-10-10')).asDays();

<强>更新

您还可以使用此功能为当前年龄添加天数:

function ageInNDays(days) {
    var age = moment.duration(moment() - moment('1990-10-10'));
    return age.add(days, 'd').asDays();
}

答案 1 :(得分:1)

来自the documentation

  

如果没有上下文,尝试将年数转换为数日是没有意义的。最好使用时刻#diff来计算两个时刻之间的天数或年数,而不是使用持续时间。

所以看起来使用diff就是答案:

function ageInNDays(days) { 
    return moment().add(days, 'days').diff('1990-10-10', 'years', true); 
}

// ageInNDays(1000);
// 27.977483271480484

请注意,为您提供分数年数(根据第三个参数)。如果您不希望它四舍五入(默认实现的确实如此),您可以截断它:

function ageInNDays(days) { 
    return Math.floor(moment().add(days, 'days').diff('1990-10-10', 'years', true)) + ' years'; 
}

// ageInNDays(1000);
// 27 years

答案 2 :(得分:0)

为小数不同添加param布尔值为true;

var currentDate = new Date();
var diff = moment(currentDate).diff('1990-10-10', 'years',true);
console.log("Year", diff);

实施例

将根据日期回答21.23