Support calculating mday from negative weeks other than -1

master
Bodaniel Jeanes 2010-01-12 14:53:11 +10:00
parent 1b2717d530
commit bdeee809aa
2 changed files with 14 additions and 2 deletions

View File

@ -48,7 +48,7 @@ module Holidays
@@holidays_by_month = {}
@@proc_cache = {}
WEEKS = {:first => 1, :second => 2, :third => 3, :fourth => 4, :fifth => 5, :last => -1}
WEEKS = {:first => 1, :second => 2, :third => 3, :fourth => 4, :fifth => 5, :last => -1, :second_last => -2, :third_last => -3}
MONTH_LENGTHS = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
DAY_SYMBOLS = Date::DAYNAMES.collect { |n| n.downcase.intern }
@ -399,6 +399,6 @@ class Date
days = 29 if month == 2 and Date.leap?(year)
return days - ((Date.civil(year, month, days).wday - wday + 7) % 7)
return days - ((Date.civil(year, month, days).wday - wday + 7) % 7) - (7 * (week.abs - 1))
end
end

View File

@ -39,6 +39,18 @@ class DateTests < Test::Unit::TestCase
assert_equal 2, Date.calculate_mday(2007, 3, :first, :friday)
assert_equal 30, Date.calculate_mday(2012, 1, :last, 1)
assert_equal 29, Date.calculate_mday(2016, 2, :last, 1)
# From end of month
assert_equal 26, Date.calculate_mday(2009, 8, -1, :wednesday)
assert_equal 19, Date.calculate_mday(2009, 8, -2, :wednesday)
assert_equal 12, Date.calculate_mday(2009, 8, -3, :wednesday)
assert_equal 13, Date.calculate_mday(2008, 8, -3, :wednesday)
assert_equal 12, Date.calculate_mday(2009, 8, -3, :wednesday)
assert_equal 11, Date.calculate_mday(2010, 8, -3, :wednesday)
assert_equal 17, Date.calculate_mday(2011, 8, -3, :wednesday)
assert_equal 15, Date.calculate_mday(2012, 8, -3, :wednesday)
assert_equal 14, Date.calculate_mday(2013, 8, -3, :wednesday)
end
def test_mday_allows_integers_or_symbols