如何在python / Django中从短号或完整表格中获取上个月的名称

时间:2019-01-04 06:48:07

标签: python django django-views python-datetime

原谅我,如果我问一个非常愚蠢的问题。

我试图获取过去几个月的名字,而不是我的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'

3 个答案:

答案 0 :(得分:3)

您的错误是因为datetime.now().month是一个整数。 strftimedatetime对象上的方法。

您可以通过执行以下操作获取当前月份:

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)

使用relativedelta

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')