Skip to main content
 首页 » 编程设计

python之如何在 python/Django 中获取上个月的简称或完整形式的数字

2025年05月04日35del

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

我正在尝试获取过去几个月的名称而不是数字我的 django 框架:

示例:例如,如果我有 12,我想返回 december 或 dec

现在,我有这个外部 python 脚本可以对日、周、月和年进行排序。

这里是外部脚本的代码 Name;basicfun: (only on the months)

#basicfun codes (external python scripts)   
 
 def selectDates(query): 
 
    if query == 'Previous-Months': 
    dataset = datetime.now().month - 1 
    dataset.strftime("%b") 
 
 return dataset  

它将返回到我的 django View 以用作 Queryset 的过滤器

这里是 Frame 在 View 中工作的代码:

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

请您参考如下方法:

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

您可以通过以下方式获取当前月份:

month = datetime.now().strftime("%b")

要获取前一个月的名称,简单但有点“hacky”的方法是创建一个包含您想要的月份字符串的字典,并将月份数字作为键:

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