docs: def parse_date(string, formation=None):
          """
          string to date stamp
          :param string: date string
          :param formation: format string
          :return: datetime.date
          """
          if formation:
              _stamp = datetime.datetime.strptime(string, formation).date()
              return _stamp
  
          _string = string.replace('.', '-').replace('/', '-')
          if '-' in _string:
              if len(_string.split('-')[0]) > 3 or len(_string.split('-')[2]) > 3:
                  try:
                      _stamp = datetime.datetime.strptime(_string, '%Y-%m-%d').date()
                  except ValueError:
                      try:
                          _stamp = datetime.datetime.strptime(_string, '%m-%d-%Y').date()
                      except ValueError:
                          _stamp = datetime.datetime.strptime(_string, '%d-%m-%Y').date()
              else:
                  try:
                      _stamp = datetime.datetime.strptime(_string, '%y-%m-%d').date()
                  except ValueError:
                      try:
                          _stamp = datetime.datetime.strptime(_string, '%m-%d-%y').date()
                      except ValueError:
                          _stamp = datetime.datetime.strptime(_string, '%d-%m-%y').date()
          else:
              if len(_string) > 6:
                  try:
                      _stamp = datetime.datetime.strptime(_string, '%Y%m%d').date()
                  except ValueError:
                      _stamp = datetime.datetime.strptime(_string, '%m%d%Y').date()
              elif len(_string) <= 6:
                  try:
                      _stamp = datetime.datetime.strptime(_string, '%y%m%d').date()
                  except ValueError:
                      _stamp = datetime.datetime.strptime(_string, '%m%d%y').date()
              else:
                  raise CanNotFormatError
          return _stamp