def >> n
      y, m = (year * 12 + (mon - 1) + n).divmod(12)
      m, = (m + 1) .divmod(1)
      d = mday
      until jd2 = _valid_civil?(y, m, d)
        d -= 1
        raise ArgumentError, 'invalid date' unless d > 0
      end
      self + (jd2 - jd)
    end
def >> n
      y, m = (year * 12 + (mon - 1) + n).divmod(12)
      m, = (m + 1) .divmod(1)
      d = mday
      until jd2 = _valid_civil?(y, m, d)
        d -= 1
        raise ArgumentError, 'invalid date' unless d > 0
      end
      self + (jd2 - jd)
    end
Return a new Date object that is +n+ months later than the current one.

 If the day-of-the-month of the current Date is greater than the last day of
 the target month, the day-of-the-month of the returned Date will be the last
 day of the target month.