Moment.js - 如何获得自约会以来的年数,而不是四舍五入?

akn*_*ds1 117 javascript date momentjs

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

Edw*_*ran 194

使用moment.js就像:

var years = moment().diff('1981-01-01', 'years');
var days = moment().diff('1981-01-01', 'days');
Run Code Online (Sandbox Code Playgroud)

有关其他参考,请阅读moment.js 官方文档.

  • 如果有人需要浮点数的年数: `varyears = moment().diff('1981-01-01', 'years', true); // 返回 40.43` (3认同)

Raz*_*aul 27

http://jsfiddle.net/xR8t5/27/

如果你不想要分数值:

var years = moment().diff('1981-01-01', 'years',false);
alert( years);
Run Code Online (Sandbox Code Playgroud)

如果你想要分数值:

var years = moment().diff('1981-01-01', 'years',true);
alert( years);
Run Code Online (Sandbox Code Playgroud)

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

  • @ ebeltran的回答涵盖了这种技术,你对小数值的讨论与这个问题无关.我宁愿把它添加为评论. (2认同)

use*_*342 19

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

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

我没有试过这个,我对时刻并不完全熟悉,但看起来这应该得到你想要的东西(无需重置月份).

  • 从文档开始,自2.0.0起,时刻#diff将向下舍入数字,所以你只需要:```age = moment().diff(birthDate,'years')```. (28认同)

akn*_*ds1 12

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

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

  • 在moment.js v2.3.1中有一个.fromNow()方法也可以提供帮助. (3认同)

小智 9

这种方法简单而有力.

值是日期,"DD-MM-YYYY"是日期的掩码.

moment().diff(moment(value, "DD-MM-YYYY"), 'years');
Run Code Online (Sandbox Code Playgroud)


Fyo*_*hov 6

试试这个:

 moment("02/26/1978", "MM/DD/YYYY").fromNow().split(" ")[0];
Run Code Online (Sandbox Code Playgroud)

说明:

我们收到这样的字符串:'23天前'.将其拆分为数组:['23','days','previous']然后取第一个项目'23'.

  • 此帖子被自动标记为低质量,因为它只是代码.您是否介意通过添加一些文本来解释它如何解决问题? (3认同)