code: def parse_human_datetime(s):
      
      if not s:
          return None
      try:
          dttm = parse(s)
      except Exception:
          try:
              cal = parsedatetime.Calendar()
              parsed_dttm, parsed_flags = cal.parseDT(s)
              # when time is not extracted, we 'reset to midnight'
              if parsed_flags & 2 == 0:
                  parsed_dttm = parsed_dttm.replace(hour=0, minute=0, second=0)
              dttm = dttm_from_timtuple(parsed_dttm.utctimetuple())
          except Exception as e:
              logging.exception(e)
              raise ValueError("Couldn't parse date string [{}]".format(s))
      return dttm
docs: Returns ``datetime.datetime`` from human readable strings
  
      >>> from datetime import date, timedelta
      >>> from dateutil.relativedelta import relativedelta
      >>> parse_human_datetime('2015-04-03')
      datetime.datetime(2015, 4, 3, 0, 0)
      >>> parse_human_datetime('2/3/1969')
      datetime.datetime(1969, 2, 3, 0, 0)
      >>> parse_human_datetime('now') <= datetime.now()
      True
      >>> parse_human_datetime('yesterday') <= datetime.now()
      True
      >>> date.today() - timedelta(1) == parse_human_datetime('yesterday').date()
      True
      >>> year_ago_1 = parse_human_datetime('one year ago').date()
      >>> year_ago_2 = (datetime.now() - relativedelta(years=1) ).date()
      >>> year_ago_1 == year_ago_2
      True