如何用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}天`; }
关键修改点
- 移除月份输出逻辑:删除原代码中与月份相关的变量和输出部分,聚焦年和总天数的计算。
- 月份转天数:将计算得到的剩余月份,通过循环调用
DaysInMonth函数累加每个月的天数,与初始天数差值合并为总天数。 - 调整输出格式:返回字符串直接采用「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
相关产品推荐
相关产品推荐

