Class: Date
- Defined in:
- lib/doh/core/date.rb,
lib/doh/util/to_display.rb,
lib/doh/util/banking_workday.rb
Direct Known Subclasses
Class Method Summary collapse
- .days_in_month(year, month) ⇒ Object
- .short_weekday_to_num(weekday) ⇒ Object
- .smart_parse(datestr) ⇒ Object
Instance Method Summary collapse
- #add_months(months, new_day = nil) ⇒ Object
- #add_years(years) ⇒ Object
- #backward_banking_workday(count = 1) ⇒ Object
- #banking_holiday? ⇒ Boolean
-
#banking_workday? ⇒ Boolean
algoritm based on www.federalreserve.gov/releases/k8/default.htm and wikipedia pages about the individual holidays.
- #date_only ⇒ Object
- #forward_banking_workday(count = 1) ⇒ Object
- #inspect ⇒ Object
- #make_datetime(hour = 0, min = 0, sec = 0) ⇒ Object
- #next_weekend_day ⇒ Object
- #previous_weekend_day ⇒ Object
- #to_display ⇒ Object
- #weekday? ⇒ Boolean
- #years_since(date) ⇒ Object
Class Method Details
.days_in_month(year, month) ⇒ Object
5 6 7 |
# File 'lib/doh/core/date.rb', line 5 def self.days_in_month(year, month) civil(year, month, -1).mday end |
.short_weekday_to_num(weekday) ⇒ Object
40 41 42 43 |
# File 'lib/doh/core/date.rb', line 40 def self.short_weekday_to_num(weekday) @@short_days_of_week ||= Time::RFC2822_DAY_NAME.collect {|day| day.downcase} @@short_days_of_week.index(weekday.downcase) end |
.smart_parse(datestr) ⇒ Object
9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
# File 'lib/doh/core/date.rb', line 9 def self.smart_parse(datestr) if datestr =~ /\A(\d\d)\/(\d\d)\/(\d\d)\z/ month = $1.to_i mday = $2.to_i year = $3.to_i result = Date.new(year, month, mday) else result = Date.parse(datestr) end if result.year < 50 result = Date.new(result.year + 2000, result.month, result.day) elsif result.year < 100 result = Date.new(result.year + 1900, result.month, result.day) end result end |
Instance Method Details
#add_months(months, new_day = nil) ⇒ Object
57 58 59 60 61 62 63 64 |
# File 'lib/doh/core/date.rb', line 57 def add_months(months, new_day = nil) total_month = month + months new_month = total_month % 12 new_month = 12 if new_month == 0 new_year = year + ((total_month - 1) / 12) calc_day = [mday, Date.days_in_month(new_year, new_month)].min Date.new(new_year, new_month, new_day || calc_day) end |
#add_years(years) ⇒ Object
66 67 68 69 70 |
# File 'lib/doh/core/date.rb', line 66 def add_years(years) new_year = year + years calc_day = [mday, Date.days_in_month(new_year, month)].min Date.new(new_year, month, calc_day) end |
#backward_banking_workday(count = 1) ⇒ Object
37 38 39 40 41 42 43 44 45 46 47 48 |
# File 'lib/doh/util/banking_workday.rb', line 37 def backward_banking_workday(count = 1) retval = self until retval.banking_workday? retval = retval - 1 end count.times do begin retval = retval - 1 end until retval.banking_workday? end retval end |
#banking_holiday? ⇒ Boolean
20 21 22 |
# File 'lib/doh/util/banking_workday.rb', line 20 def banking_holiday? weekday? && !banking_workday? end |
#banking_workday? ⇒ Boolean
algoritm based on www.federalreserve.gov/releases/k8/default.htm and wikipedia pages about the individual holidays
5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
# File 'lib/doh/util/banking_workday.rb', line 5 def banking_workday? return false if wday == 0 || wday == 6 !(case month when 1 then (mday == 1) || ((wday == 1) && ((mday == 2) || (mday > 14 && mday < 22))) when 2 then (wday == 1) && (mday > 14 && mday < 22) when 5 then (wday == 1) && (mday > 24) when 7 then (mday == 4) || ((mday == 5) && (wday == 1)) when 9 then (wday == 1) && (mday < 8) when 10 then (wday == 1) && (mday > 7) && (mday < 15) when 11 then (mday == 11) || ((mday == 12) && (wday == 1)) || ((wday == 4) && (mday > 21 && mday < 29)) when 12 then (mday == 25) || ((mday == 26) && (wday == 1)) else false end) end |
#date_only ⇒ Object
36 37 38 |
# File 'lib/doh/core/date.rb', line 36 def date_only self end |
#forward_banking_workday(count = 1) ⇒ Object
24 25 26 27 28 29 30 31 32 33 34 35 |
# File 'lib/doh/util/banking_workday.rb', line 24 def forward_banking_workday(count = 1) retval = self until retval.banking_workday? retval = retval + 1 end count.times do begin retval = retval + 1 end until retval.banking_workday? end retval end |
#inspect ⇒ Object
28 29 30 |
# File 'lib/doh/core/date.rb', line 28 def inspect strftime('%F') end |
#make_datetime(hour = 0, min = 0, sec = 0) ⇒ Object
53 54 55 |
# File 'lib/doh/core/date.rb', line 53 def make_datetime(hour = 0, min = 0, sec = 0) DateTime.new(year, month, mday, hour, min, sec) end |
#next_weekend_day ⇒ Object
50 51 52 53 54 55 56 |
# File 'lib/doh/util/banking_workday.rb', line 50 def next_weekend_day retval = self + 1 until !retval.weekday? retval += 1 end retval end |
#previous_weekend_day ⇒ Object
58 59 60 61 62 63 64 |
# File 'lib/doh/util/banking_workday.rb', line 58 def previous_weekend_day retval = self - 1 until !retval.weekday? retval -= 1 end retval end |
#to_display ⇒ Object
17 18 19 |
# File 'lib/doh/util/to_display.rb', line 17 def to_display strftime('%m/%d/%Y') end |
#weekday? ⇒ Boolean
32 33 34 |
# File 'lib/doh/core/date.rb', line 32 def weekday? (wday > 0) && (wday < 6) end |
#years_since(date) ⇒ Object
45 46 47 48 49 50 51 |
# File 'lib/doh/core/date.rb', line 45 def years_since(date) years_diff = year - date.year if month < date.month || (month == date.month && day < date.day) years_diff -= 1 end years_diff end |