get all dates between two dates in yyyy-mm-dd

Question:

Hi I’m trying to get all dates between two dates yyyy-mm-dd,
I tried this code:

def date_range(future_date):
    date_list = []
    current = datetime.strptime(datetime.today().strftime('%Y-%m-%d'), '%Y-%m-%d')
    end_dt = future_date
    for n in range(int((end_dt - current).days)+1):
        d = datetime.strftime(current + timedelta(n), '%Y-%m-%d')
        d = datetime.strptime(d, '%Y-%m-%d')
        date_list.append(d)
    return date_list
end_dt = datetime.strptime('2022-08-10', '%Y-%m-%d')
print(date_range(end_dt))

but output is not in expected form. output I get after running this code is:

datetime.datetime(2022, 7, 20, 0, 0), datetime.datetime(2022, 7, 21, 0, 0), datetime.datetime(2022, 7, 22, 0, 0), datetime.datetime(2022, 7, 23, 0, 0), datetime.datetime(2022, 7, 24, 0, 0), datetime.datetime(2022, 7, 25, 0, 0), datetime.datetime(2022, 7, 26, 0, 0), datetime.datetime(2022, 7, 27, 0, 0), datetime.datetime(2022, 7, 28, 0, 0), datetime.datetime(2022, 7, 29, 0, 0), datetime.datetime(2022, 7, 30, 0, 0), datetime.datetime(2022, 7, 31, 0, 0), datetime.datetime(2022, 8, 1, 0, 0), datetime.datetime(2022, 8, 2, 0, 0), datetime.datetime(2022, 8, 3, 0, 0), datetime.datetime(2022, 8, 4, 0, 0), datetime.datetime(2022, 8, 5, 0, 0), datetime.datetime(2022, 8, 6, 0, 0), datetime.datetime(2022, 8, 7, 0, 0), datetime.datetime(2022, 8, 8, 0, 0), datetime.datetime(2022, 8, 9, 0, 0), datetime.datetime(2022, 8, 10, 0, 0)]

Expected Output

['2022-07-20', '2022-07-21',.....,'2022-08-10']

without time.
Not trying to use pandas looking for some solution related to datetime or something.

Asked By: vineet singh

||

Answers:

If you don’t want a datetime object, but want a string, remove the usage of datetime.strptime before appending to the list

Answered By: OneCricketeer

You can use datetime.strftime(your_format).

from datetime import datetime, timedelta
def date_range(future_date):
    date_list = []
    current = datetime.today()
    end_dt = future_date
    for n in range(int((end_dt - current).days)+1):
        d = current + timedelta(n)
        date_list.append(d.strftime('%Y-%m-%d'))
    return date_list
end_dt = datetime.strptime('2022-08-10', '%Y-%m-%d')
print(date_range(end_dt))

['2022-07-20', '2022-07-21', '2022-07-22', '2022-07-23', '2022-07-24', '2022-07-25', '2022-07-26', '2022-07-27', '2022-07-28', '2022-07-29', '2022-07-30', '2022-07-31', '2022-08-01', '2022-08-02', '2022-08-03', '2022-08-04', '2022-08-05', '2022-08-06', '2022-08-07', '2022-08-08', '2022-08-09']
Answered By: I'mahdi

If you convert it to a string when adding it to the list it’ll change the output.
import datetime

def date_range(future_date):
    date_list = []
    current = datetime.datetime.strptime(datetime.datetime.today().strftime('%Y-%m-%d'), '%Y-%m-%d')
    end_dt = future_date
    for n in range(int((end_dt - current).days)+1):
        d = datetime.datetime.strftime(current + datetime.timedelta(n), '%Y-%m-%d')
        d = str(datetime.datetime.strptime(d, '%Y-%m-%d').date())
        date_list.append(d)
    return date_list

end_dt = datetime.datetime.strptime('2022-08-10', '%Y-%m-%d')
print(date_range(end_dt))
Answered By: Jessica King

You can use this code.

from datetime import datetime, timedelta

def date_range(start, end):
    days=[]
    delta = end - start 
    for i in range(delta.days+1):
        days.append((start+timedelta(days=i)).strftime("%Y-%m-%d"))
    return days

start_date = datetime(2022, 7, 1)
end_date = datetime(2022, 7, 5)
    
print(date_range(start_date, end_date))

Output :

['2022-07-01', '2022-07-02', '2022-07-03', '2022-07-04', '2022-07-05']
Answered By: Omkar Surve
Categories: questions Tags: ,
Answers are sorted by their score. The answer accepted by the question owner as the best is marked with
at the top-right corner.