直接使用datetime进行日期计算并不方便。其实这个问题可以被看作是两个12进制数的计算。
def get_month_range(start_day,end_day):
months = (end_day.year - start_day.year)*12 + end_day.month - start_day.month
month_range = ['%s-%s'%(start_day.year + mon//12,mon%12+1)
for mon in range(start_day.month-1,start_day.month + months)]
return month_range
示例
>get_month_range(datetime.date(2016, 1, 31),datetime.date(2017,3,26))
['2016-1',
'2016-2',
'2016-3',
'2016-4',
'2016-5',
'2016-6',
'2016-7',
'2016-8',
'2016-9',
'2016-10',
'2016-11',
'2016-12',
'2017-1',
'2017-2',
'2017-3']
值得注意的是,12进制显示范围为[0,11],而月份是[1,12]。所以在计算结果时有+1
,-1
的修正项。