def after(time)
      time = time.to_time

      prev_day = time.mday
      prev_month = time.month
      prev_year = time.year

      units = self.to_units(:years, :months, :days, :seconds)

      date_in_month = self.class.build_date(
        prev_year + units[:years],
        prev_month + units[:months],
        prev_day
      )
      date = date_in_month + units[:days]

      Time.new(
        date.year,
        date.month,
        date.day,
        time.hour,
        time.min,
        time.sec
      ) + units[:seconds]
    end
def after(time)
      time = time.to_time

      prev_day = time.mday
      prev_month = time.month
      prev_year = time.year

      units = self.to_units(:years, :months, :days, :seconds)

      date_in_month = self.class.build_date(
        prev_year + units[:years],
        prev_month + units[:months],
        prev_day
      )
      date = date_in_month + units[:days]

      Time.new(
        date.year,
        date.month,
        date.day,
        time.hour,
        time.min,
        time.sec
      ) + units[:seconds]
    end
Returns the time `self` later than the given time.

 @param [Time] time The initial time.
 @return [Time] The time after this {Duration} has elapsed past the
   given time.

 @example 5 minutes after January 1st, 2000 at noon
   5.minutes.after(Time.new(2000, 1, 1, 12, 00, 00))
   # => 2000-01-01 12:05:00 -0800

 @see #ago
 @see #before
 @see #from_now