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

How do I get my age in X days using Moment.js?

本文关键字:我的 Moment 何使用 js      更新时间:2023-09-26

我当前的代码是

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

.add(days, 'days')到今天,然后将其与过去的某个日期进行比较。然而,moment.duration并不总是返回经过的日历年数。它将一年定义为365天,并返回其中经过的年数。

编辑:我仍然在寻找我的年龄作为一个数年。如果可能的话,可以使用类似于moment.duration()的20年、5个月和10天格式。

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

编辑2:我现在唯一的想法是类似的东西

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

从文档中,

如果没有上下文,试图将年转换为天是没有意义的。使用moment#diff计算两个时刻之间的天数或年份比使用Durations要好得多。

所以看起来使用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

如果你真的想用天来计算年龄,你可以使用:

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

为小数差异添加参数布尔值true

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

示例

答案为21.23,具体取决于

的日期