Method: RiCal::FastDateTime#advance

Defined in:
lib/ri_cal/fast_date_time.rb

#advance(options) ⇒ Object

:nodoc:



140
141
142
143
144
145
146
147
148
149
150
151
# File 'lib/ri_cal/fast_date_time.rb', line 140

def advance(options) # :nodoc:
  new_date = @date
  new_offset = options[:offset] || offset
  month_delta = (options[:years] || 0) * 12 + (options[:months] || 0)
  day_delta =   (options[:weeks] || 0) * 7 + (options[:days] || 0)
  sec_delta = hms_to_seconds((options[:hours] || 0), (options[:minutes] || 0), (options[:seconds] || 0))
  day_delta, new_secs_since_bod = *adjust_day_delta(day_delta, secs_since_bod + sec_delta)
  new_hour, new_min, new_sec = *seconds_to_hms(new_secs_since_bod)
  new_date = new_date >> month_delta unless month_delta == 0
  new_date += day_delta unless day_delta == 0
  FastDateTime.new(new_date.year, new_date.month, new_date.day, new_hour, new_min, new_sec, new_offset)
end