1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 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 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82
|
module Chronic
class Date
YEAR_MONTHS = 12
MONTH_DAYS = [nil, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
MONTH_DAYS_LEAP = [nil, 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
YEAR_SECONDS = 31_536_000 # 365 * 24 * 60 * 60
SEASON_SECONDS = 7_862_400 # 91 * 24 * 60 * 60
MONTH_SECONDS = 2_592_000 # 30 * 24 * 60 * 60
FORTNIGHT_SECONDS = 1_209_600 # 14 * 24 * 60 * 60
WEEK_SECONDS = 604_800 # 7 * 24 * 60 * 60
WEEKEND_SECONDS = 172_800 # 2 * 24 * 60 * 60
DAY_SECONDS = 86_400 # 24 * 60 * 60
MONTHS = {
:january => 1,
:february => 2,
:march => 3,
:april => 4,
:may => 5,
:june => 6,
:july => 7,
:august => 8,
:september => 9,
:october => 10,
:november => 11,
:december => 12
}
DAYS = {
:sunday => 0,
:monday => 1,
:tuesday => 2,
:wednesday => 3,
:thursday => 4,
:friday => 5,
:saturday => 6
}
# Checks if given number could be day
def self.could_be_day?(day)
day >= 1 && day <= 31
end
# Checks if given number could be month
def self.could_be_month?(month)
month >= 1 && month <= 12
end
# Checks if given number could be year
def self.could_be_year?(year)
year >= 1 && year <= 9999
end
# Build a year from a 2 digit suffix.
#
# year - The two digit Integer year to build from.
# bias - The Integer amount of future years to bias.
#
# Examples:
#
# make_year(96, 50) #=> 1996
# make_year(79, 20) #=> 2079
# make_year(00, 50) #=> 2000
#
# Returns The Integer 4 digit year.
def self.make_year(year, bias)
return year if year.to_s.size > 2
start_year = Chronic.time_class.now.year - bias
century = (start_year / 100) * 100
full_year = century + year
full_year += 100 if full_year < start_year
full_year
end
def self.month_overflow?(year, month, day)
if ::Date.leap?(year)
day > Date::MONTH_DAYS_LEAP[month]
else
day > Date::MONTH_DAYS[month]
end
end
end
end
|