Search code examples
pythondatetimetimedelta

How to get last three months in year-mon format in python?


I want to get last three months from todays date in year-mon format. For example if todays date is 2021-08-04 then I want list of last three months as - ["2021-05", "2021-06", "2021-07"] I have no idea how to start with this. Any help will be appreciated.


Solution

  • use dateutil's relativedelta to get consistent results, as not all months have equal number of days. E.g.

    from datetime import datetime
    from dateutil.relativedelta import relativedelta
    
    NOW = datetime.now()             # reference date
    delta = relativedelta(months=-1) # delta in time 
    n = 3                            # how many steps
    
    fmt = lambda dt: dt.strftime("%Y-%m") # formatter; datetime object to string
    
    l = sorted((fmt(NOW+delta*i) for i in range(1, n+1)))
    # l
    # ['2021-05', '2021-06', '2021-07']