163

我正在尝试使用Moment.js计算一个人的年龄,但我发现其他有用的fromNow方法会将年份四舍五入。例如,如果今天是 12/27/2012 并且此人的出生日期是 02/26/1978,则moment("02/26/1978", "MM/DD/YYYY").fromNow()返回“35 年前”。如何让 Moment.js 忽略月数,并简单地返回自日期以来的年数(即 34 年)?

4

10 回答 10

279

使用 moment.js 很简单:

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

如需更多参考,您可以阅读 moment.js官方文档

于 2014-02-24T22:04:01.083 回答
41

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

单位可以是[秒、分钟、小时、天、周、月、年]

于 2016-06-24T00:16:03.797 回答
23

似乎有一个差异函数可以接受要使用的时间间隔以及不舍入结果的选项。所以,像

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

我没有尝试过,而且我对时刻并不完全熟悉,但似乎这应该得到你想要的(无需重置月份)。

于 2012-12-27T18:01:34.687 回答
13

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

> moment("02/26/1978", "MM/DD/YYYY").month(0).from(moment().month(0))
"34 years ago"
于 2012-12-27T16:14:30.943 回答
11

这种方法简单而强大。

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

moment().diff(moment(value, "DD-MM-YYYY"), 'years');
于 2016-12-23T21:46:53.817 回答
8

试试这个:

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

解释:

我们收到类似这样的字符串:'23 days ago'。将其拆分为数组:['23', 'days', 'ago'] 然后取第一项'23'。

于 2014-06-12T16:11:11.077 回答
3

这种方法对我有用。它检查这个人今年是否过生日,否则减去一年。

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

编辑:第一个版本并不完美。更新的应该

于 2013-04-12T12:59:22.453 回答
2

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

var age = Math.floor((new Date() - new Date(date_of_birth)) / 1000 / 60 / 60 / 24 / 365.25)
于 2016-06-09T05:04:03.527 回答
1

当您想显示年份和剩余天数时:

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');
于 2018-02-06T12:54:23.970 回答
0

我更喜欢这种小方法。

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;
}
于 2019-01-28T08:00:13.457 回答