Method: TimeHelper#interval

Defined in:
lib/rails_com/utils/time_helper.rb

#interval(start_at, finish_at, interval_start: '12:30', since: 1.hour) ⇒ Object



43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
# File 'lib/rails_com/utils/time_helper.rb', line 43

def interval(start_at, finish_at, interval_start: '12:30', since: 1.hour)
  return 0 if start_at.blank? || finish_at.blank? || start_at >= finish_at
  raise 'Must be same day!' if start_at.to_date != finish_at.to_date

  hour, min = interval_start.split(':')
  interval_start_at = start_at.change hour: hour, min: min
  interval_finish_at = interval_start_at.since(since)

  if start_at < interval_start_at && finish_at > interval_finish_at
    seconds = ((finish_at - start_at) - since).to_i
  elsif start_at < interval_start_at && finish_at >= interval_start_at && finish_at <= interval_finish_at
    seconds = interval_start_at - start_at
  elsif start_at >= interval_start_at && start_at <= interval_finish_at && finish_at > interval_finish_at
    seconds = finish_at - interval_finish_at
  elsif start_at >= interval_start_at && start_at <= interval_finish_at && finish_at <= interval_finish_at
    seconds = 0
  else
    seconds = finish_at - start_at
  end
  seconds
end