["python","date","datetime"]
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. My working version seems inelegant: 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)
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 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)