打字稿-计算从当前日期开始的月份和年份

时间:2018-09-21 13:08:19

标签: javascript angular typescript date

我为应用程序中的每个用户指定了生日。例如。格式为29/01/2015

目前,我的代码计算从今天的日期到提供的出生日期的年份:

((new Date((new Date().getTime() - new Date(user.dob).getTime())).getFullYear()) - 1970)

对于上面的示例,由于3已经三年了,因此它将检索数字29/01/2015

如果年份低于1,那么获得月份的最佳优化是什么?

例如,对于此日期:21/03/2018,由于还没有整整一年,我的代码将返回0。我如何优化逻辑以检索6 months到今天(21/09/2018)和21/03/2018之间的时间?

PS 。我想避免使用任何库。

3 个答案:

答案 0 :(得分:1)

我会使用momentjs是一个很棒的库来存放与日期时间相关的内容。无论如何,我的方法是  -计算月份  -然后检查超过12个月的月数,然后我从这几个月中提取数年  -除非显示月份

时刻:Live sample with moment

let months = moment('2011-06-11').diff(moment('2011-04-11'), 'month', true);

if (months >= 12) {
    console.log('years:', (months - (months %12))/12 );
} else {
    console.log('only months', parseInt(months));
}

使用纯js:Live sample with pure JS

let dateFrom = new Date('2011-04-11');
let dateTo = new Date('2011-06-11');

let months = dateTo.getMonth() - dateFrom.getMonth() + (12 * (dateTo.getFullYear() - dateFrom.getFullYear()));

if (months >= 12) {
    console.log('years:', (months - (months %12))/12 );
} else {
    console.log('only months', parseInt(months));
}

答案 1 :(得分:1)

我最近在我的一个项目中使用了以下代码,它可以正常工作。注意,我也使用的是momentjs,它是免费的,可以下载和使用开源代码。

这是示例jsfiddle链接http://jsfiddle.net/n70vdz1k/

var dob = "13-05-1981";
mdob = moment(dob, 'DD-MM-YYYY'); // date of birth
if (!mdob.isValid()) {
    alert("Invalid date format");
    return;
}
targetDate = moment(); //this will give today's date
months = targetDate.diff(mdob, 'months');
let years = parseInt(months / 12);
let balanceMonths = months % 12;
let days;
if (!balanceMonths) {
    months = 0;
   // days = targetDate.diff(mdob, 'days');
    dob_date = mdob.date();
    target_month = targetDate.month();
    construct_date = moment().month(target_month).date(dob_date);
    days = targetDate.diff(construct_date, 'days');
    if(days < 0){
        days = 30 + days;
    }
} else {
    months = balanceMonths;
    dob_date = mdob.date();
    target_month = targetDate.month();
    construct_date = moment().month(target_month).date(dob_date);
    days = targetDate.diff(construct_date, 'days');
     if(days < 0){

        days = 30 + days;
    }
}

console.log("months", months)
console.log("years", years)
console.log("days", days)

答案 2 :(得分:1)

您可以自己计算出差异:

function diffYears(d) {
  return Math.floor((Date.now() - new Date(d)) / 12 / 30 / 24 / 3600 / 1000);
}

function diffMonths(d) {
  return Math.floor((Date.now() - new Date(d)) / 30 / 24 / 3600 / 1000);
}

console.log(diffMonths('2018-03-21'), diffYears('2018-03-21'));
console.log(diffMonths('2017-03-21'), diffYears('2017-03-21'));
console.log(diffMonths('2016-03-21'), diffYears('2016-03-21'));