2015-07-28 2 views
2

Я уверен, что есть простой способ сделать это, что я пропустил, пытаясь найти ответ.Python 2.7 Получите месяц с 2 месяцев назад (i.e получите «05» с сегодняшней даты)

В основном, как я могу получить число месяцев i.e '05' или '04' из числа месяцев назад?

Извините, если на это уже был дан ответ, но вопросы, которые я исследовал здесь, не могли ответить на мой вопрос.

Редактировать

Там нет параметра в месяц timedelta, так что это не ответил на мой вопрос.

Мартин ответил на мой вопрос отлично!

+3

@MorganThrapp: это не даст вам месяц назад, потому что месяцы имеют неправильную длину. –

+0

@MartijnPieters О, верно, я забыл, что timedelta не имеет месяца kwarg. Я подумал, что это по какой-то причине. –

+0

Я думаю, что это relativedelta, что есть месяц kwarg –

ответ

7

С некоторой простой модульной арифметики:

from datetime import date 

def months_ago(count): 
    today = date.today() 
    return ((today.month - count - 1) % 12) + 1 

Демо:

>>> date.today() 
datetime.date(2015, 7, 28) 
>>> for i in range(13): 
...  print(months_ago(i)) 
... 
7 
6 
5 
4 
3 
2 
1 
12 
11 
10 
9 
8 
7 
+0

Это работает отлично спасибо! –

3

Хотя ответ Мартейн является идеальным для вашего конкретного вопроса для тех, кто натыкается на этот ответ, глядя на свидание Х месяцев назад, а чем только номер месяца, который я бы предложил использовать relativedelta dateutil. Я нашел это весьма полезным:

>>> from datetime import date 
>>> from dateutil.relativedelta import relativedelta 

>>> today = date.today() 
datetime.date(2015, 7, 28) 

>>> for i in range(13): 
     print(today - relativedelta(months=i)) 
2015-07-28 
2015-06-28 
2015-05-28 
2015-04-28 
2015-03-28 
2015-02-28 
2015-01-28 
2014-12-28 
2014-11-28 
2014-10-28 
2014-09-28 
2014-08-28 
2014-07-28 
+0

Абсолютно, это также полезно всем, кто это просматривает! благодаря –

Смежные вопросы