code: def backdate(res, date=None, as_datetime=False, fmt='%Y-%m-%d'):
      
      if res is None:
          return None
  
      if date is None:
          date = datetime.datetime.now()
      else:
          try:
              date = parse_date(date)
          except Exception as e:
              pass
  
      new_date = date
  
      periods = int("".join([s for s in res if s.isdigit()]))
  
      if periods > 0:
  
          if "K" in res:
              new_date = date - datetime.timedelta(microseconds=periods)
          elif "S" in res:
              new_date = date - datetime.timedelta(seconds=periods)
          elif "T" in res:
              new_date = date - datetime.timedelta(minutes=periods)
          elif "H" in res or "V" in res:
              new_date = date - datetime.timedelta(hours=periods)
          elif "W" in res:
              new_date = date - datetime.timedelta(weeks=periods)
          else:  # days
              new_date = date - datetime.timedelta(days=periods)
  
          # not a week day:
          while new_date.weekday() > 4:  # Mon-Fri are 0-4
              new_date = backdate(res="1D", date=new_date, as_datetime=True)
  
      if as_datetime:
          return new_date
  
      return new_date.strftime(fmt)
docs: get past date based on currect date