Class: Time

Inherits:
Object
  • Object
show all
Defined in:
lib/chronik.rb,
lib/chronik/repeaters/repeater_season.rb

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.construct(year, month = 1, day = 1, hour = 0, minute = 0, second = 0) ⇒ Object



57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
# File 'lib/chronik.rb', line 57

def self.construct(year, month = 1, day = 1, hour = 0, minute = 0, second = 0)
  if second >= 60
    minute += second / 60
    second = second % 60
  end
  
  if minute >= 60
    hour += minute / 60
    minute = minute % 60
  end
  
  if hour >= 24
    day += hour / 24
    hour = hour % 24
  end
  
  # determine if there is a day overflow. this is complicated by our crappy calendar
  # system (non-constant number of days per month)
  day <= 56 || raise("day must be no more than 56 (makes month resolution easier)")
  if day > 28
    # no month ever has fewer than 28 days, so only do this if necessary
    leap_year = (year % 4 == 0) && !(year % 100 == 0)
    leap_year_month_days = [31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
    common_year_month_days = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
    days_this_month = leap_year ? leap_year_month_days[month - 1] : common_year_month_days[month - 1]
    if day > days_this_month
      month += day / days_this_month
      day = day % days_this_month
    end
  end
  
  if month > 12
    if month % 12 == 0
      year += (month - 12) / 12
      month = 12
    else
      year += month / 12
      month = month % 12
    end
  end
  
  Chronik.time_class.local(year, month, day, hour, minute, second)
end

Instance Method Details

#to_minidateObject



2
3
4
# File 'lib/chronik/repeaters/repeater_season.rb', line 2

def to_minidate
  MiniDate.new(self.month, self.day)
end