docs: def format(date, now=None, locale='en'):
      '''
      the entry method
      '''
      if not isinstance(date, timedelta):
          if now is None:
              now = datetime.now()
          date = parser.parse(date)
          now = parser.parse(now)
  
          if date is None:
              raise ParameterUnvalid('the parameter `date` should be datetime '
                                     '/ timedelta, or datetime formated string.')
          if now is None:
              raise ParameterUnvalid('the parameter `now` should be datetime, '
                                     'or datetime formated string.')
          date = now - date
      # the gap sec
      diff_seconds = int(total_seconds(date))
  
      # is ago or in
      ago_in = 0
      if diff_seconds < 0:
          ago_in = 1  # date is later then now, is the time in future
          diff_seconds *= -1  # chango to positive
  
      tmp = 0
      i = 0
      while i < SEC_ARRAY_LEN:
          tmp = SEC_ARRAY[i]
          if diff_seconds >= tmp:
              i += 1
              diff_seconds /= tmp
          else:
              break
      diff_seconds = int(diff_seconds)
      i *= 2
  
      if diff_seconds > (i == 0 and 9 or 1):
          i += 1
  
      if locale is None:
          locale = DEFAULT_LOCALE
  
      tmp = timeago_template(locale, i, ago_in)
      if hasattr(tmp, '__call__'):
          tmp = tmp(diff_seconds)
      return '%s' in tmp and tmp % diff_seconds or tmp