Class: Datte::Dattetime

Inherits:
Object
  • Object
show all
Defined in:
lib/datte/dattetime.rb

Constant Summary collapse

DEFAULT_OPTIONS =
{
  force_update: false,
  level: 1
}

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(options = {}) ⇒ Dattetime

Returns a new instance of Dattetime.



11
12
13
14
# File 'lib/datte/dattetime.rb', line 11

def initialize(options = {})
  @options = DEFAULT_OPTIONS.merge(options)
  @date = DateTime.now
end

Instance Attribute Details

#dayObject (readonly)

Returns the value of attribute day.



9
10
11
# File 'lib/datte/dattetime.rb', line 9

def day
  @day
end

#hourObject (readonly)

Returns the value of attribute hour.



9
10
11
# File 'lib/datte/dattetime.rb', line 9

def hour
  @hour
end

#minObject (readonly)

Returns the value of attribute min.



9
10
11
# File 'lib/datte/dattetime.rb', line 9

def min
  @min
end

#monthObject (readonly)

Returns the value of attribute month.



9
10
11
# File 'lib/datte/dattetime.rb', line 9

def month
  @month
end

#yearObject (readonly)

Returns the value of attribute year.



9
10
11
# File 'lib/datte/dattetime.rb', line 9

def year
  @year
end

Instance Method Details

#after(md) ⇒ Object

何年後、何ヶ月後、何日後, 何時間後, 何分後



37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
# File 'lib/datte/dattetime.rb', line 37

def after(md)
  if md.matched?(:year)
    @year, @month, @day = now[:year] + md[:year].to_i, now[:month], now[:day]
  end
  if md.matched?(:month)
    carry = (now[:month] + md[:month].to_i) / 12
    @year, @month, @day = now[:year] + carry, now[:month] + md[:month].to_i , now[:day]
  end
  if md.matched?(:day)
    days = [31,28,31,30,31,30,31,31,30,31,30,31][now[:month] - 1]
    carry = (now[:day] + md[:day].to_i) / days
    @year, @month, @day = now[:year], now[:month] + carry, now[:day] + md[:day].to_i - carry * days
  end
  if md.matched?(:hour)
    carry = (now[:hour] + md[:hour].to_i) / 24
    @day, @hour, @min = now[:day] + carry, now[:hour] + md[:hour].to_i - carry * 24, now[:min]
  end
  if md.matched?(:min)
    carry = (now[:min] + md[:min].to_i) / 60
    @day, @hour, @min = now[:day], now[:hour] + carry, now[:min] + md[:min].to_i - 60 * carry
  end
  # @date >> (md[:year].to_i * 12) if md.matched?(:year) # 何年後
  # @date >> md[:month].to_i if md.matched?(:month) # 何ヶ月後
  # @date + md[:day].to_i if md.matched?(:day) # 何日後
  # @date + Rational(md[:hour].to_i, 24) if md.matched?(:hour) # 何時間後
  # @date + Rational(md[:hour].to_i, 24 * 60) if md.matched?(:hour) # 何分後
end

#to_datetimeObject



16
17
18
19
# File 'lib/datte/dattetime.rb', line 16

def to_datetime
  return nil unless check_level?
  DateTime.new(y, m, d, h, mi, 0) rescue nil
end

#update_date(md, options = @options) ⇒ Object

年か月か日を更新



22
23
24
25
26
27
# File 'lib/datte/dattetime.rb', line 22

def update_date(md, options = @options)
  op = @options[:force_update] ? '=' : '||='
  eval("@year #{op} year!(md)")
  eval("@month #{op} month!(md)")
  eval("@day #{op} day!(md)")
end

#update_time(md, options = @options) ⇒ Object

時か分を更新



30
31
32
33
34
# File 'lib/datte/dattetime.rb', line 30

def update_time(md, options = @options)
  op = @options[:force_update] ? '=' : '||='
  eval("@hour #{op} hour!(md)")
  eval("@min #{op} min!(md)")
end