Quay lại Blog
3 min read

Cách tính tuổi bằng Python (Ví dụ về datetime và dateutil)

Tìm hiểu cách tính tuổi từ ngày sinh bằng Python. Bao gồm các năm đã hoàn thành, tuổi tính đến một ngày cụ thể và các lỗi thường gặp như năm nhuận và múi giờ.

Cách tính tuổi bằng Python (Ví dụ về datetime và dateutil)

Cách tính tuổi bằng Python (Ví dụ về datetime và dateutil)

Nếu bạn cầntính tuổi bằng Pythonkể từ ngày sinh, điều quan trọng cần làm đúng là xác định độ tuổi: hầu hết các ứng dụng đều cầnnăm hoàn thành(sinh nhật đầy đủ), không chỉ là sự khác biệt giữa các năm.

1) Số năm hoàn thành (định nghĩa an toàn)

Điều này trả về số năm đầy đủ kể từ ngày sinh (DOB). Nó trừ 1 nếu ngày sinh nhật chưa diễn ra trong năm hiện tại.

from datetime import date

def age_years(dob: date, as_of: date | None = None) -> int:
    if as_of is None:
        as_of = date.today()
    years = as_of.year - dob.year
    before_birthday = (as_of.month, as_of.day) < (dob.month, dob.day)
    return years - 1 if before_birthday else years

print(age_years(date(2000, 10, 5), date(2026, 2, 26)))

2) Tuổi tính đến một ngày cụ thể (không chỉ hôm nay)

Nhiều trường hợp sử dụng cần có ngày "kể từ": giá bảo hiểm, kiểm tra tính đủ điều kiện, thời gian nghỉ học, báo cáo. Chức năng trên đã hỗ trợ nó thông quaas_of.

3) Đầu ra kiểu chính xác (năm và tháng)

Nếu bạn muốn kết quả đầu ra như "25 năm 4 tháng", hãy sử dụngdateutil.relativedelta(nó xử lý độ dài tháng một cách chính xác).

from datetime import date
from dateutil.relativedelta import relativedelta

def age_ym(dob: date, as_of: date | None = None):
    if as_of is None:
        as_of = date.today()
    rd = relativedelta(as_of, dob)
    return rd.years, rd.months

print(age_ym(date(2000, 10, 5), date(2026, 2, 26)))

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

  • Sinh nhật ngày nhuận:quyết định cách bạn muốn xử lý ngày 29 tháng 2 trong những năm không nhuận. Nhiều hệ thống sử dụng ngày 28 tháng 2 hoặc ngày 1 tháng 3. Hành vi của thư viện rất quan trọng, vì vậy hãy kiểm tra nó.
  • Ngày giờ và múi giờ:đối với DOB, thíchdatequadatetime. Nếu bạn phải sử dụng datetimes, trước tiên hãy chuẩn hóa theo cùng múi giờ.
  • DOB tương lai hoặc các giá trị bị thiếu:xác thực đầu vào để tránh độ tuổi tiêu cực hoặc sự cố.

Kiểm tra nhanh (không có mã)

Nếu bạn chỉ cần một kết quả nhanh chóng, hãy sử dụng máy tính trực tuyến:Tính tuổi trực tuyến.

Hướng dẫn liên quan

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

Tại sao đôi khi (today.year - dob.year) lại sai?

Bởi vì nó bỏ qua liệu sinh nhật năm nay đã diễn ra hay chưa. Bạn phải trừ 1 trước ngày sinh nhật.

Tôi nên sử dụng datetime hay date cho ngày sinh?

Sử dụngdatekhi có thể. DOB là một ngày theo lịch và múi giờ có thể thay đổi thời gian theo ngày.