วิธีการคำนวณอายุใน Python (ตัวอย่าง datetime และ dateutil)
เรียนรู้วิธีการคำนวณอายุจากวันเกิดใน Python รวมถึงปีที่เสร็จสมบูรณ์ อายุ ณ วันที่ระบุ และข้อผิดพลาดทั่วไป เช่น ปีอธิกสุรทินและเขตเวลา
วิธีการคำนวณอายุใน Python (ตัวอย่าง datetime และ dateutil)
หากคุณต้องการคำนวณอายุใน Pythonนับจากวันเดือนปีเกิด สิ่งสำคัญที่ต้องทำให้ถูกต้องคือคำจำกัดความของอายุ ซึ่งแอปส่วนใหญ่ต้องการปีที่เสร็จสมบูรณ์(วันเกิดเต็ม) ไม่ใช่เพียงความแตกต่างระหว่างปี
1) ปีที่เสร็จสมบูรณ์ (คำจำกัดความที่ปลอดภัย)
ซึ่งจะส่งคืนจำนวนปีเต็มนับตั้งแต่วันเดือนปีเกิด (DOB) ลบ 1 หากวันเกิดยังไม่เกิดขึ้นในปีปัจจุบัน
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) อายุ ณ วันที่ระบุ (ไม่ใช่แค่วันนี้)
กรณีการใช้งานจำนวนมากจำเป็นต้องมีวันที่ "ณ วันที่": ราคาประกันภัย การตรวจสอบสิทธิ์ การตัดสิทธิ์ของโรงเรียน รายงาน ฟังก์ชั่นด้านบนรองรับผ่านแล้วas_of.
3) เอาต์พุตสไตล์ที่แน่นอน (ปีและเดือน)
หากคุณต้องการผลลัพธ์เช่น "25 ปี 4 เดือน" ให้ใช้dateutil.relativedelta(จัดการความยาวเดือนได้อย่างถูกต้อง)
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) ข้อผิดพลาดทั่วไป (และวิธีหลีกเลี่ยง)
- วันเกิดวันอธิกสุรทิน:ตัดสินใจว่าคุณต้องการปฏิบัติต่อวันที่ 29 กุมภาพันธ์ในปีที่ไม่ใช่ปีอธิกสุรทินอย่างไร หลายระบบใช้วันที่ 28 ก.พ. หรือ 1 มี.ค. พฤติกรรมของห้องสมุดมีความสำคัญ ดังนั้นให้ทดสอบดู
- วันที่และเวลา:สำหรับ DOB ให้เลือก
dateเกินdatetime. หากคุณต้องใช้วันที่และเวลา ให้ทำให้เป็นเขตเวลาเดียวกันให้เป็นมาตรฐานก่อน - DOB ในอนาคตหรือค่าที่หายไป:ตรวจสอบอินพุตเพื่อหลีกเลี่ยงอายุเชิงลบหรือข้อขัดข้อง
ตรวจสอบด่วน (ไม่มีรหัส)
หากคุณต้องการผลลัพธ์ที่รวดเร็วเพียงรายการเดียว ให้ใช้เครื่องคิดเลขออนไลน์:คำนวณอายุออนไลน์.
คำแนะนำที่เกี่ยวข้อง
คำถามที่พบบ่อย
ทำไม (today.year - dob.year) ถึงผิดในบางครั้ง?
เพราะไม่สนใจว่าวันเกิดปีนี้จะเกิดขึ้นแล้วหรือยัง คุณต้องลบ 1 ก่อนวันเกิด
ฉันควรใช้ datetime หรือ date เป็นวันเกิดหรือไม่?
ใช้dateเมื่อเป็นไปได้ DOB คือวันตามปฏิทิน และโซนเวลาสามารถเปลี่ยนวันที่และเวลาข้ามวันได้