Python - Get Yesterday's date as a string in YYYY-MM-DD format

As an input to an API request I need to get yesterday's date as a string in the format YYYY-MM-DD. I have a working version which is:

yesterday = datetime.date.fromordinal(datetime.date.today().toordinal()-1) report_date = str(yesterday.year) + \ ('-' if len(str(yesterday.month)) == 2 else '-0') + str(yesterday.month) + \ ('-' if len(str(yesterday.day)) == 2 else '-0') + str(yesterday.day) 

There must be a more elegant way to do this, interested for educational purposes as much as anything else!

1

5 Answers

You Just need to subtract one day from today's date. In Python datetime.timedelta object lets you create specific spans of time as a timedelta object.

datetime.timedelta(1) gives you the duration of "one day" and is subtractable from a datetime object. After you subtracted the objects you can use datetime.strftime in order to convert the result --which is a date object-- to string format based on your format of choice:

>>> from datetime import datetime, timedelta >>> yesterday = datetime.now() - timedelta(1) >>> type(yesterday) >>> datetime.datetime >>> datetime.strftime(yesterday, '%Y-%m-%d') '2015-05-26' 

Note that instead of calling the datetime.strftime function, you can also directly use strftime method of datetime objects:

>>> (datetime.now() - timedelta(1)).strftime('%Y-%m-%d') '2015-05-26' 

As a function:

from datetime import datetime, timedelta def yesterday(frmt='%Y-%m-%d', string=True): yesterday = datetime.now() - timedelta(1) if string: return yesterday.strftime(frmt) return yesterday 

example:

In [10]: yesterday() Out[10]: '2022-05-13' In [11]: yesterday(string=False) Out[11]: datetime.datetime(2022, 5, 13, 12, 34, 31, 701270) 
2

An alternative answer that uses today() method to calculate current date and then subtracts one using timedelta(). Rest of the steps remain the same.

from datetime import date, timedelta today = date.today() yesterday = today - timedelta(days = 1) print(today) print(yesterday) Output: 2019-06-14 2019-06-13 
1
>>> import datetime >>> datetime.date.fromordinal(datetime.date.today().toordinal()-1).strftime("%F") '2015-05-26' 

Calling .isoformat() on a date object will give you YYYY-MM-DD

from datetime import date, timedelta (date.today() - timedelta(1)).isoformat() 

I'm trying to use only import datetime based on this answer.

import datetime oneday = datetime.timedelta(days=1) yesterday = datetime.date.today() - oneday 

Your Answer

Sign up or log in

Sign up using Google Sign up using Facebook Sign up using Email and Password

Post as a guest

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

You Might Also Like