tka*_*lve 142 python datetime date
我怎样才能从今天的日期和一个人的出生日期中找到蟒蛇的年龄?birthdate来自Django模型中的DateField.
Dan*_*air 255
考虑到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))
Run Code Online (Sandbox Code Playgroud)
mpe*_*pen 68
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
Run Code Online (Sandbox Code Playgroud)
更新:使用Danny的解决方案,它会更好
The*_*One 16
from datetime import date
days_in_year = 365.2425
age = int((date.today() - birth_date).days / days_in_year)
Run Code Online (Sandbox Code Playgroud)
在Python 3中,您可以执行除法datetime.timedelta
:
from datetime import date, timedelta
age = (date.today() - birth_date) // timedelta(days=365.2425)
Run Code Online (Sandbox Code Playgroud)
Aru*_*tri 11
正如@ [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)`
Run Code Online (Sandbox Code Playgroud)
最简单的方法是使用 python-dateutil
import datetime
import dateutil
def birthday(date):
# Get the current date
now = datetime.datetime.utcnow()
now = now.date()
# Get the difference between the current date and the birthday
age = dateutil.relativedelta.relativedelta(now, date)
age = age.years
return age
Run Code Online (Sandbox Code Playgroud)
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
Run Code Online (Sandbox Code Playgroud)
不幸的是,你不能只使用timedelata作为它使用的最大单位是日和闰年将使你的计算无效.因此,如果去年未满,我们可以找到年数,然后调整一年:
from datetime import date
birth_date = date(1980, 5, 26)
years = date.today().year - birth_date.year
if (datetime.now() - birth_date.replace(year=datetime.now().year)).days >= 0:
age = years
else:
age = years - 1
Run Code Online (Sandbox Code Playgroud)
UPD:
当2月29日发挥作用时,这个解决方案确实会导致异常.这是正确的检查:
from datetime import date
birth_date = date(1980, 5, 26)
today = date.today()
years = today.year - birth_date.year
if all((x >= y) for x,y in zip(today.timetuple(), birth_date.timetuple()):
age = years
else:
age = years - 1
Run Code Online (Sandbox Code Playgroud)
UPD2:
多次调用now()
性能命中是荒谬的,除了非常特殊的情况外,它并不重要.使用变量的真正原因是数据不完整的风险.
如果您想使用 django 模板在页面中打印此内容,那么以下内容可能就足够了:
{{ birth_date|timesince }}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
134635 次 |
最近记录: |