JavaScript函数,用于计算两个日期之间的年,月和日数

时间:2016-05-09 19:10:37

标签: javascript

我希望使用JavaScript计算年,月和日的年龄。此代码适用于某些日期,但如果日期不到1年或过去任何时间它都不起作用。

function age(year, month, day) {

var today = new Date();
var endDate = new Date(year, month, day).getTime();
var dayDiff = Math.floor((endDate - today) / 86400000);


if (dayDiff >= 365) {
    var year = Math.floor(dayDiff / 365);
    var remainder = Math.floor(dayDiff) - (year * 365);
    var months = Math.floor(remainder / 30);
}

var days = Math.floor(remainder) - (months * 30);

return year + " years" + " " + months + " months" + " " + days + "        days";
}
 console.log(age(2017, 11, 17));
 console.log(age(2015, 3, 6));

3 个答案:

答案 0 :(得分:0)

  

但是如果日期不到1年或者过去的任何时间它都不起作用。

查看代码的条件:

if (dayDiff >= 365) {
    ...
}

这可以解释为什么当日期不到1年(365天)时它不会触发。

答案 1 :(得分:0)

我建议使用此功能来获得"自然"两个日期之间的年数,月数和天数:



function interval(date1, date2) {
    if (date1 > date2) { // swap
        var result = interval(date2, date1);
        result.years  = -result.years;
        result.months = -result.months;
        result.days   = -result.days;
        return result;
    }
    result = {
        years:  date2.getYear()  - date1.getYear(),
        months: date2.getMonth() - date1.getMonth(),
        days:   date2.getDate()  - date1.getDate()
    };
    if (result.days < 0) {
        result.months--;
        // days = days left in date1's month, 
        //   plus days that have passed in date2's month
        var copy1 = new Date(date1.getTime());
        copy1.setDate(32);
        result.days = 32-date1.getDate()-copy1.getDate()+date2.getDate();
    }
    if (result.months < 0) {
        result.years--;
        result.months+=12;
    }
    return result;
}

// Be aware that the month argument is zero-based (January = 0)
var date1 = new Date(2015, 4-1, 6);
var date2 = new Date(2015, 5-1, 9);

document.write(JSON.stringify(interval(date1, date2)));
&#13;
&#13;
&#13;

这个解决方案将以一种我们自然会做的方式处理闰年(2月29日)和月长差异(我认为)。

例如,2015年2月28日至2015年3月28日之间的时间间隔恰好是一个月,而不是28天。如果这两天都在2016年,差异仍然只有一个月,而不是29天。

与月份和日期完全相同但日期不同的日期将始终存在确切年数的差异。因此,2015-03-01和2016-03-01之间的差异将是1年,而不是1年和1天(因为计算365天为1年)。

答案 2 :(得分:0)

您有两种选择:完全删除int min = sizeof(list)/sizeof(list[0]); 条件或向if (dayDiff >= 365)写一条else语句,以处理if的情况。

遵循你的逻辑:

dayDiff < 365

相关问题