Vì đối số của bạn giống như 2 ngày trước, cách đây 3 tháng, 2 năm trước. Hàm bên dưới có thể trợ giúp trong việc lấy ngày chính xác cho các đối số.Trước tiên, bạn cần phải nhập khẩu các utils ngày sau
import datetime
from dateutil.relativedelta import relativedelta
Sau đó, thực hiện các chức năng dưới đây
def get_past_date(str_days_ago):
TODAY = datetime.date.today()
splitted = str_days_ago.split()
if len(splitted) == 1 and splitted[0].lower() == 'today':
return str(TODAY.isoformat())
elif len(splitted) == 1 and splitted[0].lower() == 'yesterday':
date = TODAY - relativedelta(days=1)
return str(date.isoformat())
elif splitted[1].lower() in ['hour', 'hours', 'hr', 'hrs', 'h']:
date = datetime.datetime.now() - relativedelta(hours=int(splitted[0]))
return str(date.date().isoformat())
elif splitted[1].lower() in ['day', 'days', 'd']:
date = TODAY - relativedelta(days=int(splitted[0]))
return str(date.isoformat())
elif splitted[1].lower() in ['wk', 'wks', 'week', 'weeks', 'w']:
date = TODAY - relativedelta(weeks=int(splitted[0]))
return str(date.isoformat())
elif splitted[1].lower() in ['mon', 'mons', 'month', 'months', 'm']:
date = TODAY - relativedelta(months=int(splitted[0]))
return str(date.isoformat())
elif splitted[1].lower() in ['yrs', 'yr', 'years', 'year', 'y']:
date = TODAY - relativedelta(years=int(splitted[0]))
return str(date.isoformat())
else:
return "Wrong Argument format"
Sau đó bạn có thể gọi hàm như thế này:
print get_past_date('5 hours ago')
print get_past_date('yesterday')
print get_past_date('3 days ago')
print get_past_date('4 months ago')
print get_past_date('2 years ago')
print get_past_date('today')
Nguồn
2017-03-31 11:39:18
Có vẻ như 'dateutil' thể xử lý nó theo định dạng mà Lattyware và tôi đã quy định, chỉ thay thế 'dateutil.relativedelta' cho' datetime.timedelta'. (xem cập nhật và liên kết của tôi). – mgilson