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

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/14057497/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-08-24 15:35:53  来源:igfitidea点击:

Moment.js - how do I get the number of years since a date, not rounded up?

javascriptdatemomentjs

提问by aknuds1

I'm trying to calculate a person's age using Moment.js, but I'm finding that the otherwise useful fromNowmethod rounds up the years. For instance, if today is 12/27/2012 and the person's birth date is 02/26/1978, moment("02/26/1978", "MM/DD/YYYY").fromNow()returns '35 years ago'. How can I make Moment.js ignore the number of months, and simply return the number of years (i.e. 34) since the date?

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

采纳答案by aknuds1

I found that it would work to reset the month to January for both dates (the provided date and the present):

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

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

回答by Edwin Beltran

Using moment.js is as easy as:

使用 moment.js 非常简单:

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

For additional reference, you can read moment.js official documentation.

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

回答by Razan Paul

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

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

if you do not want fraction values:

如果您不想要分数值:

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

if you want fraction values:

如果你想要分数:

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

Units can be [seconds, minutes, hours, days, weeks, months, years]

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

回答by user4815162342

There appears to be a difference functionthat accepts time intervals to use as well as an option to notround the result. So, something like

有似乎是一个差函数接受的时间间隔使用,以及作为一个选项圆的结果。所以,像

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

I haven't tried this, and I'm not completely familiar with moment, but it seems like this should get what you want (without having to reset the month).

我没有试过这个,我对 moment 并不完全熟悉,但似乎这应该得到你想要的(而不必重置月份)。

回答by user2327748

This method is easy and powerful.

这种方法简单而强大。

Value is a date and "DD-MM-YYYY" is the mask of the date.

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

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

回答by Fyodor Khruschov

Try this:

尝试这个:

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

Explanation:

解释:

We receive string something like this: '23 days ago'. Split it to array: ['23', 'days', 'ago'] and then take first item '23'.

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

回答by Rickard Andersson

This method works for me. It's checking if the person has had their birthday this year and subtracts one year otherwise.

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

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

Edit: First version didn't quite work perfectly. The updated one should

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

回答by Xdg

When you want to show years and the remaining days:

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

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

回答by Ankit

If you dont want to use any module for age calculation

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

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

回答by Dagan Bog-Computers

I prefer this small method.

我更喜欢这个小方法。

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