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


当前回答

from datetime import date

days_in_year = 365.2425    
age = int((date.today() - birth_date).days / days_in_year)

在Python 3中,你可以对datetime.timedelta执行除法:

from datetime import date, timedelta

age = (date.today() - birth_date) // timedelta(days=365.2425)

其他回答

serializers.py

age = serializers.SerializerMethodField('get_age')

class Meta:
    model = YourModel
    fields = [..,'','birthdate','age',..]


import datetime

def get_age(self, instance):
    return datetime.datetime.now().year - instance.birthdate.year
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

days_in_year = 365.2425    
age = int((date.today() - birth_date).days / days_in_year)

在Python 3中,你可以对datetime.timedelta执行除法:

from datetime import date, timedelta

age = (date.today() - birth_date) // timedelta(days=365.2425)

为了便于阅读和理解,稍微修改了Danny的解决方案

    from datetime import date

    def calculate_age(birth_date):
        today = date.today()
        age = today.year - birth_date.year
        full_year_passed = (today.month, today.day) < (birth_date.month, birth_date.day)
        if not full_year_passed:
            age -= 1
        return age

考虑到int(True)是1,int(False)是0,元组比较从左到右,这可以做得更简单:

from datetime import date

def calculate_age(born):
    today = date.today()
    return today.year - born.year - ((today.month, today.day) < (born.month, born.day))