Quay lại Blog
4 min read

Cách tính tuổi bằng JavaScript (DOB sang năm, tháng, ngày)

Tìm hiểu những cách thực tế để tính tuổi từ ngày sinh bằng JavaScript. Bao gồm năm, tháng, ngày chính xác, tùy chọn cập nhật và các lỗi phổ biến như múi giờ và năm nhuận.

Cách tính tuổi bằng JavaScript (DOB sang năm, tháng, ngày)

Nếu cần tính tuổi của một người tính từ ngày sinh (DOB) bằng JavaScript, bạn có thể thực hiện việc đó theo một số cách khác nhau. Điều quan trọng là quyết định ý bạn khi nói tuổi:

  • Tuổi trong những năm trọn vẹn (phổ biến nhất)
  • Tuổi chính xác (năm, tháng, ngày)
  • Tuổi tính đến một ngày cụ thể (không phải luôn luôn là hôm nay)

1) Tính tuổi theo những năm trọn vẹn (đơn giản và chính xác)

Đây là phương pháp tiêu chuẩn: trừ số năm và điều chỉnh nếu năm nay chưa có sinh nhật.

hàm ageInYears(dob, asOf = new Date()) {
  const sinh = Ngày mới(dob);
  const ref = Ngày mới(asOf);

  hãy để năm = ref.getFullYear() - Birth.getFullYear();
  const m = ref.getMonth() - Birth.getMonth();

  if (m < 0 || (m === 0 && ref.getDate() < Birth.getDate())) {
    năm--;
  }

  năm trở lại;
}

Ví dụ: DOB 2000-02-10 và kể từ 2026-02-09 mang lại 25 (sinh nhật ngày mai).[[TAG_29]]]

2) Tính tuổi chính xác (năm, tháng, ngày)

Nếu muốn có số liệu phân tích chính xác, trước tiên bạn có thể tính năm, sau đó là tháng, rồi tính ngày bằng cách "mượn" từ tháng trước khi cần.

hàm chính xácAge(dob, asOf = new Date()) {
  const sinh = Ngày mới(dob);
  const ref = Ngày mới(asOf);

  hãy để năm = ref.getFullYear() - Birth.getFullYear();
  để tháng = ref.getMonth() - Birth.getMonth();
  hãy để ngày = ref.getDate() - Birth.getDate();

  // Điều chỉnh ngày bằng cách mượn từ tháng trước
  nếu (ngày < 0) {
    const prevMonth = Ngày mới(ref.getFullYear(), ref.getMonth(), 0); // ngày 0 = ngày cuối cùng của tháng trước
    ngày += prevMonth.getDate();
    tháng--;
  }

  // Điều chỉnh tháng bằng cách vay từ năm trước
  nếu (tháng < 0) {
    tháng += 12;
    năm--;
  }

  trở về { năm, tháng, ngày };
}

Lưu ý: Các trường hợp cạnh ngày trong tháng (như DOB vào ngày 31) yêu cầu phải kiểm tra cẩn thận. Nếu bạn cần thứ gì đó mạnh mẽ trên tất cả các ngôn ngữ và trường hợp biên, hãy cân nhắc sử dụng thư viện ngày đã được kiểm tra kỹ lưỡng.

3) Sử dụng ngày "hiện tại" cho tuổi ở ngày trong quá khứ hoặc tương lai

Nhiều ứng dụng cần có tuổi tại một ngày tham chiếu cụ thể (bảo hiểm, quy định về tính đủ điều kiện, thời hạn của năm học). Cả hai hàm trên đều chấp nhận tham số asOf, vì vậy bạn có thể thực hiện:

ageInYears('1995-06-20', '2030-01-01');
chính xácAge('1995-06-20', '2030-01-01');

Những cạm bẫy thường gặp (và cách tránh chúng)

  • Múi giờ: phân tích cú pháp YYYY-MM-DD có thể hoạt động khác nhau giữa các môi trường. Nếu bạn chỉ quan tâm đến ngày, hãy tạo Ngày theo giờ địa phương: new Date(year, thángIndex, day).
  • Sinh nhật ngày nhuận: quyết định quy tắc của bạn cho ngày 29 tháng 2 đối với những năm không nhuận (28 tháng 2 hoặc 1 tháng 3). Hãy nhất quán.
  • Thông tin đầu vào không hợp lệ: xác thực rằng DOB là ngày thực chứ không phải trong tương lai.

Tùy chọn nhanh: sử dụng công cụ tính tuổi trực tuyến

Nếu bạnchỉ cần câu trả lời (hoặc bạn muốn xác thực việc triển khai của mình), hãy sử dụng máy tính miễn phí của chúng tôi: Tính tuổi trực tuyến.

Hướng dẫn liên quan

Câu hỏi thường gặp

Cách tính tuổi chính xác nhất là gì?

Đối với hầu hết các trường hợp, "số năm trọn vẹn" (tuổi tính bằng cả năm) là tiêu chuẩn. Nếu bạn cần phân tích đầy đủ, trước tiên hãy tính năm, sau đó là tháng, sau đó là ngày và kiểm tra các trường hợp cạnh như độ dài tháng và năm nhuận.

Tại sao đôi khi JavaScript hiển thị sai ngày cho một chuỗi ngày?

Bởi vì new Date('YYYY-MM-DD') có thể được hiểu là UTC trong một số môi trường. Nếu bạn quan tâm đến ngày theo lịch địa phương, hãy phân tích cú pháp các phần và sử dụng new Date(y, m, d).