python 实现年龄计算

方法一:

import datetime

month_days = {
    1: 31,
    2: 28,
    3: 31,
    4: 30,
    5: 31,
    6: 30,
    7: 31,
    8: 31,
    9: 30,
    10: 31,
    11: 30,
    12: 31
}


def is_leap_year(year):
    """
    判断是否闰年
    :param year:
    :return:
    """
    if year % 400 == 0 or year % 40 == 0 or year % 4 == 0:
        return True
    else:
        return False


def minus_result(nowadays, birthday, mode=False):
    y = nowadays.year - birthday.year
    m = nowadays.month - birthday.month
    d = nowadays.day - birthday.day
    if d < 0:
        if birthday.month == 2:
            if is_leap_year(birthday.year):
                month_days[2] = 29
        d += month_days[birthday.month]
        m -= 1
    if m < 0:
        m += 12
        y -= 1

    if mode is False:
        if y == 0:
            if m == 0:
                return f'{d}天'
            else:
                return f'{m}月{d}天'
        else:
            return f'{y}岁{m}月{d}天'
    else:
        return (nowadays - birthday).days


def calculate_age(year=None, month=None, day=None, mode=False):
    """
    获取年龄
    model=False 返回格式  年月日
    model=True 返回格式  出生总天数
    :param year: 出生年
    :param month: 出生月
    :param day: 出生日
    :param mode: 计算模式 True or False
    :return:
    """
    birthday = datetime.date(year, month, day)
    nowadays = datetime.date.today()
    return minus_result(nowadays, birthday, mode=mode)


if __name__ == '__main__':
    age = calculate_age(1990, 1, 1)
    days = calculate_age(1990, 1, 1, mode=True)
    print(f'你的年龄为:{age} 共 {days}天')

方法二:

import datetime


def calculate_age(birthday):
    """
    计算年龄 周岁
    :param birthday:
    :return:
    """
    today = datetime.date.today()
    return today.year - birthday.year - ((today.month, today.day) < (birthday.month, birthday.day))


birthday = datetime.date(2010, 9, 3)
print(calculate_age(birthday))