我想得到最后的N个月元素(字符串)的列表。例如,现在是10月(10个月),我想得到最后3个月,我的示例结果是:
["2022-10", "2022-09", "2022-08"]我知道如何获得当前的月份和年份:
import datetime
from datetime import date
todays_date = datetime.date.today()
year = str(todays_date.year)
month = str(todays_date.month)
print(year, month)但是我不知道如何写一个函数给我最后的N (2,3,4,6,7,.)月份。
最大的问题是,例如二月,那是第二个月,我想得到最后的4个月,这一年也需要更新。
发布于 2022-10-11 15:56:51
使用timedelta函数。使用您的代码,它将类似于这样。N是你想走多远。
import datetime
n = 3 #howmany months back you want to go
todays_date = datetime.date.today()
print(todays_date.year, todays_date.month)
for i in range(1,n):
todays_date-=datetime.timedelta(days=30)
print(todays_date.year, todays_date.month)输出是,
2022 10
2022 9
2022 8当然,有更优雅的方法可以做到这一点。你可以制作一本每月有多少天的字典,因为有些月有30天、31天、29天和28天,所以如果你追溯到很多年前,你可能会发现一些错误。
你也可以只取一年和一个月,减去一个循环。
然后,当月份达到1时,将年份减少1,并将月份重置为12。
import datetime
n = 14
today = datetime.date.today()
def months_back (today, months):
year = int(today.year)
month = int(today.month)
for i in range(months):
print(year,month)
if month != 1:
month -= 1
else:
year-=1
month=12
months_back(todays_date, 3)这个函数实现了我前面描述的功能。它将月份和年份视为整数。
发布于 2022-10-11 16:05:02
这里有一种方法。只需在for循环中对其进行计数。
import datetime
from datetime import date
def nMonthsBack(year, month, n):
# Find correct year by seeing how many years back we go
t = month -n -1
t = t//12
year = year + t
# Count down months
n = n%12
for i in range(n):
if (month == 1):
month = 12
else:
month = month -1
return year, month
todays_date = datetime.date.today()
year, month = nMonthsBack(todays_date.year, todays_date.month, 155)
print(str(year), str(month))发布于 2022-10-11 16:08:28
你可以用timedelte,
def last_n_months(n):
start_date = datetime.date.today() - timedelta(days=n*30)
delta = datetime.date.today() - start_date
return set([(start_date + timedelta(days=i)).strftime("%Y-%m") for i in range(delta.days + 1)])处决:
In [1]: last_n_months(5)
Out[1]: {'2022-05', '2022-06', '2022-07', '2022-08', '2022-09', '2022-10'}https://stackoverflow.com/questions/74030853
复制相似问题