获取两个日期之间的所有月份

三种方法
1.比较基本的 获取两个日期之间相差多少月份,然后逐月相加,当然,按12个月一循环,nowMonth//12为需要加的年份,nowMonth%12+1为月份数。

import datetime
start = '2015-07-28'
end = '2021-01-12'

def getMonth_1(start,end):
    startDate = datetime.datetime.strptime(start, '%Y-%m-%d')
    endDate = datetime.datetime.strptime(end, '%Y-%m-%d')
    months = (endDate.year - startDate.year) * 12 + endDate.month - startDate.month
    print(months)
    month_range=[]
    for x in range(0,months+1):
        nowMonth=(startDate.month-1+x)
        date='%s-%s'%(startDate.year+nowMonth//12,nowMonth%12+1)
        month_range.append(date)
    return month_range

2.其实还是第一种思路,只是看着比较简洁

def getMonth_2(start,end):
    startDate = datetime.datetime.strptime(start, '%Y-%m-%d')
    endDate = datetime.datetime.strptime(end, '%Y-%m-%d')
    months = (endDate.year - startDate.year) * 12 + endDate.month - startDate.month
    print(months)
    month_range = ['%s-%s' % (startDate.year + mon // 12, mon % 12 + 1)
                   for mon in range(startDate.month - 1, startDate.month + months)]
    return month_range

3.取巧的一种方法 我们知道pandas 的date_range方法可以取到两个日期之间所有的日期,然后我们日期格式只取年月,然后直接去重,就获得了所需月份。(set去重之后变成无序,所以用sort重新排序一下)

import pandas as pd
def getMonth_3(start,end):
    date_list = [x for x in pd.date_range(start, end).strftime('%Y-%m')]
    month_range=list(set(date_list))
    month_range.sort(key=date_list.index)
    return month_range

你可能感兴趣的:(获取两个日期之间的所有月份)