返回博客
1 min read

如何在 JavaScript 中计算年龄(DOB 到年、月、日)

学习在 JavaScript 中根据出生日期计算年龄的实用方法。包括确切的年、月、日、当前日期选项以及时区和闰年等常见陷阱。

如何在 JavaScript 中计算年龄(DOB 到年、月、日)

如果您需要在 JavaScript 中根据出生日期 (DOB) 计算一个人的年龄,您可以通过几种不同的方式来实现。关键是确定 年龄:

的含义
  • 年龄(最常见)
  • 确切年龄(年、月、日)
  • 截至特定日期的年龄(并不总是今天)

1) Calculate age in completed years (simple and correct)

这是标准方法:减去年份并在今年尚未生日的情况下进行调整。

函数ageInYears(dob, asOf = new Date()) {
  const 出生 = new Date(dob);
  const ref = new Date(asOf);

  让年份 = ref.getFullYear() -birth.getFullYear();
  const m = ref.getMonth() -birth.getMonth();

  if (m < 0 || (m === 0 && ref.getDate() 

示例: DOB 2000-02-10 和截至 2026-02-09 给出 25(明天生日)。

2) 计算准确年龄(年、月、日)

如果您想要精确的细分,您可以先计算年,然后计算月,然后在需要时通过“借用”上个月来计算天。

函数exactAge(dob, asOf = new Date()) {
  const 出生 = new Date(dob);
  const ref = new Date(asOf);

  让年份 = ref.getFullYear() -birth.getFullYear();
  让月份 = ref.getMonth() -birth.getMonth();
  让 days = ref.getDate() -birth.getDate();

  // 通过借用上个月来调整天数
  如果(天数 < 0){
    const prevMonth = new Date(ref.getFullYear(), ref.getMonth(), 0); // 第 0 天 = 上个月的最后一天
    天+= prevMonth.getDate();
    几个月--;
  }

  // 通过借用上一年来调整月份
  如果(月 < 0){
    月 += 12;
    年 - ;
  }

  返回{年、月、日};
}

注意:月份日期的边缘情况(例如 31 日的 DOB)需要仔细测试。如果您需要跨所有区域设置和边缘情况的强大功能,请考虑使用经过充分测试的日期库。

3) 使用“当前”日期来表示过去或未来日期的年龄

许多应用需要特定参考日期的年龄(保险、资格规则、学年截止日期)。上述两个函数都接受 asOf 参数,因此您可以执行以下操作:

ageInYears('1995-06-20', '2030-01-01');
精确年龄('1995-06-20', '2030-01-01');

常见陷阱(以及如何避免)

  • 时区:解析YYYY-MM-DD在不同环境中的行为可能有所不同。如果您只关心日期,请以当地时间构建日期:new Date(year,monthIndex,day).
  • 闰日生日:决定非闰年(2 月 28 日或 3 月 1 日)2 月 29 日的规则。保持一致。
  • 无效输入:验证出生日期是真实日期而不是未来日期。

快速选项:使用在线年龄计算器

如果您只需要答案(或者您想验证您的实现),请使用我们的免费计算器:在线计算年龄.

相关指南

常见问题解答

计算年龄最准确的方法是什么?

在大多数情况下,“完整年份”(整岁年龄)是标准。如果您需要完整的细分,请先计算年份,然后计算月份,然后计算日期,并测试月份长度和闰年等边缘情况。

为什么 JavaScript 有时会给出错误的日期字符串?

因为new Date('YYYY-MM-DD')在某些环境中可以解释为UTC。如果您关心本地日历日期,请解析各个部分并使用 new Date(y, m, d).