我怎么能从今天的日期和一个人的出生日期找到一个python年龄?出生日期来自Django模型中的DateField。


当前回答

一个比@DannyWAdairs稍微优雅一点的解决方案可能是使用.timetuple()方法[Python-doc]:

from datetime import date

def calculate_age(born):
    today = date.today()
    return today.year - born.year - (today.timetuple()[1:3] < born.timetuple()[1:3])

你可以很容易地使用这个来进一步推广它,将其粒度增加到秒,这样,如果它大于或等于当天的秒数,年龄就会增加,例如born是一个datetime对象:

from datetime import datetime

def calculate_age_with_seconds(born):
    today = datetime.now()
    return today.year - born.year - (today.timetuple()[1:6] < born.timetuple()[1:6])

这对于date或datetime对象都适用。

其他回答

from datetime import date

def age(birth_date):
    today = date.today()
    y = today.year - birth_date.year
    if today.month < birth_date.month or today.month == birth_date.month and today.day < birth_date.day:
        y -= 1
    return y
from datetime import date

def calculate_age(born):
    today = date.today()
    try: 
        birthday = born.replace(year=today.year)
    except ValueError: # raised when birth date is February 29 and the current year is not a leap year
        birthday = born.replace(year=today.year, month=born.month+1, day=1)
    if birthday > today:
        return today.year - born.year - 1
    else:
        return today.year - born.year

更新:使用丹尼的解决方案,效果更好

进口日期时间

def age(date_of_birth):
    if date_of_birth > datetime.date.today().replace(year = date_of_birth.year):
        return datetime.date.today().year - date_of_birth.year - 1
    else:
        return datetime.date.today().year - date_of_birth.year

在你的情况下:

import datetime

# your model
def age(self):
    if self.birthdate > datetime.date.today().replace(year = self.birthdate.year):
        return datetime.date.today().year - self.birthdate.year - 1
    else:
        return datetime.date.today().year - self.birthdate.year
import datetime

今天的日期

td=datetime.datetime.now().date() 

你的出生年月日

bd=datetime.date(1989,3,15)

你的年龄

age_years=int((td-bd).days /365.25)

正如@[Tomasz Zielinski]和@ williams所建议的那样,python-dateutil可以只做5行。

from dateutil.relativedelta import *
from datetime import date
today = date.today()
dob = date(1982, 7, 5)
age = relativedelta(today, dob)

>>relativedelta(years=+33, months=+11, days=+16)`