You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用JavaScript计算以年和天为单位的年龄?

年龄计算:「X年Y天」格式实现方案

需求说明

需将现有年龄计算函数,从输出年、月、天的格式,修改为仅输出「X年Y天」的格式(例如1934年1月26日出生的人,年龄显示为89年149天)。

原代码问题

原代码计算了年、月、天三个维度的差值,但未将剩余月份转换为总天数,因此需要调整逻辑,把月份对应的天数累加后与原有天数合并,最终只保留年和总天数的输出。

修改后的实现代码

// 需确保已定义DaysInMonth函数,用于获取指定月份的天数
function DaysInMonth(date) {
    return new Date(date.getUTCFullYear(), date.getUTCMonth() + 1, 0).getUTCDate();
}

function getAge(date_1, date_2) {
    // 转换为UTC时间,避免时区差异影响计算
    var date2_UTC = new Date(Date.UTC(date_2.getUTCFullYear(), date_2.getUTCMonth(), date_2.getUTCDate()));
    var date1_UTC = new Date(Date.UTC(date_1.getFullYear(), date_1.getUTCMonth(), date_1.getUTCDate()));

    var years, totalDays;

    // 计算初始天数差值,处理跨月情况
    var days = date2_UTC.getDate() - date1_UTC.getDate();
    if (days < 0) {
        date2_UTC.setMonth(date2_UTC.getMonth() - 1);
        days += DaysInMonth(date2_UTC);
    }

    // 计算剩余月份差值,处理跨年情况
    var remainingMonths = date2_UTC.getMonth() - date1_UTC.getMonth();
    if (remainingMonths < 0) {
        date2_UTC.setFullYear(date2_UTC.getFullYear() - 1);
        remainingMonths += 12;
    }

    // 计算年份差值
    years = date2_UTC.getFullYear() - date1_UTC.getFullYear();

    // 将剩余月份转换为天数,累加得到总天数
    totalDays = days;
    var tempDate = new Date(date1_UTC);
    for (var i = 0; i < remainingMonths; i++) {
        tempDate.setMonth(tempDate.getMonth() + 1);
        totalDays += DaysInMonth(tempDate);
    }

    // 返回「X年Y天」格式结果,可按需调整单复数逻辑
    return `${years}年${totalDays}天`;
}

关键修改点

  1. 移除月份输出逻辑:删除原代码中与月份相关的变量和输出部分,聚焦年和总天数的计算。
  2. 月份转天数:将计算得到的剩余月份,通过循环调用DaysInMonth函数累加每个月的天数,与初始天数差值合并为总天数。
  3. 调整输出格式:返回字符串直接采用「X年Y天」格式,若需区分单复数(如"1年"/"N年"),可自行补充判断逻辑。

验证示例

输入出生日期new Date(1934, 0, 26)(1934年1月26日)和当前日期new Date(2023, 6, 23)(2023年7月23日),调用getAge函数将返回89年149天,符合需求示例。

内容的提问来源于stack exchange,提问作者John

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.18 14:35:35