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

我试图用Moment.js来计算一个人的年龄,但是我发现从Now方法中得到的其他方面有用的东西是四舍五入的。 例如,如果今天是2012年12月27日,并且该人的出生date是02/26/1978, moment("02/26/1978", "MM/DD/YYYY").fromNow() 35年前返回”。 我怎样才能使Moment.js忽略月数,并简单地返回自从date以来的年数(即34)?

使用时刻很简单,如下所示:

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

希望这可以帮助。

似乎有一个不同的function ,接受时间间隔使用,以及一个选项围绕结果。 所以,像

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

我没有尝试过这一点,我不完全熟悉时刻,但似乎这应该得到你想要的(不必重置月份)。

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

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

我发现这两个date(提供的date和现在)将重置月份到一月份:

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

这种方法简单而强大。

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

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

尝试这个:

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

说明:

我们收到这样的string:“23天前”。 将其拆分为数组:['23','days','ago'],然后取第一个项目'23'。

这个方法适用于我。 这是检查人是否今年过生日,否则减去一年。

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

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

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

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

忘记一下,写下你自己的!

 getAge(date) { const dob = new Date(date) const now = new Date() const diff = now - dob return Math.floor(diff/(1000 * 60 * 60 * 24 * 365)) } 

这当然不占闰年,所以忽略这个答案。