docs: def timestring(self, maxunits=3):
          """Returns a string representation of this amount of time, like:
          "2 hours and 30 minutes" or "4 days, 2 hours and 40 minutes"
  
          :param maxunits = 3
              The maximum amount of units to use.
  
              1: "2 hours"
              4: "4 days, 2 hours, 5 minuts and 46 seconds"
  
          This method ignores the sign of the amount of time (that rhimes).
          """
  
          try:
              assert maxunits >= 1
          except:
              raise ValueError("Values < 1 for maxunits are not supported.")
  
          values = collections.OrderedDict()
  
          seconds = abs(self.seconds)
  
          values["year"] = _round(seconds / (3600 * 24 * 365))
          values["year"] = values["year"] if values["year"] > 0 else 0
          seconds -= values["year"] * 3600 * 24 * 365
  
          values["month"] = _round(seconds / (3600 * 24 * 30))
          values["month"] = values["month"] if values["month"] > 0 else 0
          seconds -= values["month"] * 3600 * 24 * 30
  
          values["day"] = _round(seconds / (3600 * 24))
          values["day"] = values["day"] if values["day"] > 0 else 0
          seconds -= values["day"] * 3600 * 24
  
          values["hour"] = _round(seconds / 3600)
          values["hour"] = values["hour"] if values["hour"] > 0 else 0
          seconds -= values["hour"] * 3600
  
          values["minute"] = _round(seconds / 60)
          values["minute"] = values["minute"] if values["minute"] > 0 else 0
          values["second"] = _round(seconds - values["minute"] * 60)
  
          for k, v in values.items():
              if v == 0:
                  values.pop(k)
              else:
                  break
  
          textsegs = []
          for k, v in list(values.items())[:maxunits]:
              if v > 0:
                  textsegs.append(_pluralstr(k, v))
  
          if len(textsegs) == 0:
              return ""
          if len(textsegs) == 1:
              return textsegs[0]
  
          return ", ".join(textsegs[:-1]) + " and " + textsegs[-1]