Как получить название предыдущих месяцев, коротких или полных номеров в Python / Django - PullRequest
0 голосов
/ 04 января 2019

Прости меня, если я задаю очень глупые вопросы.

Я пытаюсь получить имя прошлых месяцев вместо цифр моей структуры 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})

Решение, которое я пробовал

Эта ссылка: Получить название месяца из номера

1.

   dataset = datetime.now().month - 1
   dataset.strftime("%b") 

ошибка:

Exception Type:AttributeError
Exception Value:'int' object has no attribute 'strftime'

Ответы [ 3 ]

0 голосов
/ 04 января 2019

Использование 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']
0 голосов
/ 04 января 2019

Попробуйте это

previous_month = (datetime.date.today().replace(day=1) - datetime.timedelta(days=1)).strftime('%B')
0 голосов
/ 04 января 2019

Ваша ошибка в том, что 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 дата предыдущего месяца

...