Class: Daru::DateOffset

Inherits:
Object
  • Object
show all
Defined in:
lib/daru/date_time/offsets.rb

Overview

Generic class for generating date offsets.

Instance Method Summary collapse

Constructor Details

#initialize(opts = {}) ⇒ DateOffset

A Daru::DateOffset object is created by a passing certain options to the constructor, which determine the kind of offset the object will support.

You can pass one of the following options followed by their number to the DateOffset constructor:

  • :secs - Create a seconds offset

  • :mins - Create a minutes offset

  • :hours - Create an hours offset

  • :days - Create a days offset

  • :weeks - Create a weeks offset

  • :months - Create a months offset

  • :years - Create a years offset

Additionaly, passing the `:n` option will apply the offset that many times.

Examples:

Usage of DateOffset

# Create an offset of 3 weeks.
offset = Daru::DateOffset.new(weeks: 3)
offset + DateTime.new(2012,5,3)
#=> #<DateTime: 2012-05-24T00:00:00+00:00 ((2456072j,0s,0n),+0s,2299161j)>

# Create an offset of 5 hours
offset = Daru::DateOffset.new(hours: 5)
offset + DateTime.new(2015,3,3,23,5,1)
#=> #<DateTime: 2015-03-04T04:05:01+00:00 ((2457086j,14701s,0n),+0s,2299161j)>

# Create an offset of 2 minutes, applied 5 times
offset = Daru::DateOffset.new(mins: 2, n: 5)
offset + DateTime.new(2011,5,3,3,5)
#=> #<DateTime: 2011-05-03T03:15:00+00:00 ((2455685j,11700s,0n),+0s,2299161j)>


38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
# File 'lib/daru/date_time/offsets.rb', line 38

def initialize opts={}
  n = opts[:n] || 1

  @offset =
    case
    when opts[:secs]
      Offsets::Second.new(n*opts[:secs])
    when opts[:mins]
      Offsets::Minute.new(n*opts[:mins])
    when opts[:hours]
      Offsets::Hour.new(n*opts[:hours])
    when opts[:days]
      Offsets::Day.new(n*opts[:days])
    when opts[:weeks]
      Offsets::Day.new(7*n*opts[:weeks])
    when opts[:months]
      Offsets::Month.new(n*opts[:months])
    when opts[:years]
      Offsets::Year.new(n*opts[:years])
    end
end

Instance Method Details

#+(date_time) ⇒ Object

Offset a DateTime forward.



63
64
65
# File 'lib/daru/date_time/offsets.rb', line 63

def + date_time
  @offset + date_time
end

#-(date_time) ⇒ Object

Offset a DateTime backward.



70
71
72
# File 'lib/daru/date_time/offsets.rb', line 70

def - date_time
  @offset - date_time
end