原谅我,如果我问一个非常愚蠢的问题。
我试图获取过去几个月的名字,而不是我的Django框架的数字:
示例:例如,如果我有12
,我想返回december or dec
现在,我有这个外部python脚本,可以对日期,星期,月份和年份进行排序。
这里是外部脚本名称的代码; basicfun :(仅在月份中)
#basicfun codes (external python scripts)
def selectDates(query):
if query == 'Previous-Months':
dataset = datetime.now().month - 1
dataset.strftime("%b")
return dataset
它将返回到我的django视图,用作Queryset的过滤器
在此处查看框架的工作代码:
#Django view
def ph(request):
query = request.GET.get('dateRange')
fill = selectDates(query)
data = tank_system.objects.all().filter(datetime__contains=fill)
return render(request, 'FrounterWeb/extends/ph.html', {'tank': data})
此链接: Get month name from number
1。
dataset = datetime.now().month - 1
dataset.strftime("%b")
错误:
Exception Type:AttributeError
Exception Value:'int' object has no attribute 'strftime'
答案 0 :(得分:3)
您的错误是因为datetime.now().month
是一个整数。 strftime
是datetime
对象上的方法。
您可以通过执行以下操作获取当前月份:
month = datetime.now().strftime("%b")
要获取以前的月份名称,简单但有点“怪异”的方法就是创建一个以月号为键的想要的月份字符串的字典:
from datetime import datetime
def limit_month_number(start_month, months_ago):
"""
This function will return a value from 1-12 inclusive.
>>> limit_month_number(1,3) -> 10
>>> limit_month_number(12,14) -> 10
"""
month_number = start_month - (months_ago % 12)
if month_number < 1:
month_number = 12 + month_number
return month_number
def get_prev_month(months_ago):
months = {1: 'Jan', 2: 'Feb', 10: 'Oct', 11: 'Nov', 12: 'Dec'}
this_month = datetime.now().month
month_number = limit_month_number(this_month, months_ago)
prev_month = months[month_number]
return prev_month
print(get_prev_month(2)) # 'Nov', two months ago from now
此外,我必须指出,您可以使用datetime
进行此操作。看看其他文章:python date of the previous month
答案 1 :(得分:2)
from dateutil.relativedelta import relativedelta
today = dt.date.today() # 2019-01-03
>>> (today - relativedelta(months=1)).strftime('%B') # `%b' for abbreviated month
'December'
在过去三个月中,您可以使用列表理解:
>>> [(dt.date.today() - relativedelta(months=x)).strftime('%B') for x in range(3, 0, -1)]
['October', 'November', 'December']
答案 2 :(得分:2)
尝试一下
previous_month = (datetime.date.today().replace(day=1) - datetime.timedelta(days=1)).strftime('%B')