code: def parse_date(datestr):
      
  
      match = re.match(
          r'([0-9]{4})(-?([0-9]{1,2}))?(-?([0-9]{1,2}))?(_w)?$', datestr)
      if not match:
          return (arrow.get(datestr,
                            tzinfo=config.timezone).replace(tzinfo=config.timezone),
                  'day', 'YYYY-MM-DD')
  
      year, month, day, week = match.group(1, 3, 5, 6)
      start = arrow.Arrow(year=int(year), month=int(
          month or 1), day=int(day or 1), tzinfo=config.timezone)
  
      if week:
          return start.span('week')[0], 'week', WEEK_FORMAT
      if day:
          return start, 'day', DAY_FORMAT
      if month:
          return start, 'month', MONTH_FORMAT
      if year:
          return start, 'year', YEAR_FORMAT
  
      raise ValueError("Could not parse date: {}".format(datestr))
docs: Parse a date expression into a tuple of:
  
          (start_date, span_type, span_format)
  
      Arguments:
          datestr -- A date specification, in the format of YYYY-MM-DD (dashes optional)