需求描述:
我在开发博客的过程中想实现类似csdn的按月份给博客归档,但是我的数据库表里没有维护相关的字段,所以每个月的博客数据需要后期查询呈现。那怎么获取需要在页面显示的年月列表呢?我想要的效果如下图所示:
同时,在我的数据库表里,每位博主都有一个账号注册时间的字段。所以这个问题就变成了,已知开始的时间点(该博主注册的时间)和结束的时间点(当前时间),如何打印出这个区间内所有的月份。
代码实现:
from datetime import datetime
#这是起始时间,假设某位博主是2018年10月6日注册的
start=datetime(2018,10,6)
#这是结束时间,也就是当前的时间
end=datetime.now()
#计算起止日期之间有多少个月(月份的差值)
month_num=12*(end.year-start.year)+end.month-start.month
#这个空列表用于存储我们最终得出的所有的年月
time_list=[]
#年份的起点是注册日期的年份
year=start.year
#月份的起点是注册日期的月份
month=start.month
#遍历月份数+1,之所以加1是因为即使是本月注册的博主,月份差为0,他的页面也要显示一个月,即本月
for m in range(month_num+1):
#把年月的小列表追加进大列表
time_list.append([year,month])
#月份加1
month+=1
#当月份达到13的时候,需要再从1月开始数,而且这代表跨年了,所以年份加1
if month==13:
month=1
year+=1
#我希望最终的结果是当前月份在最前面,离我越远的月份越靠后,所以这里要反转列表
time_list.reverse()
print(time_list)
终端:[[2019, 7], [2019, 6], [2019, 5], [2019, 4], [2019, 3], [2019, 2], [2019, 1], [2018,
12], [2018, 11], [2018, 10]]