lib/hiccup/enumerable/monthly_enumerator.rb in hiccup-0.5.15 vs lib/hiccup/enumerable/monthly_enumerator.rb in hiccup-0.5.16
- old
+ new
@@ -100,18 +100,24 @@
end
def occurrences_in_month(year, month)
- wday_of_first_of_month = Date.new(year, month, 1).wday
monthly_pattern.map do |occurrence|
if occurrence.is_a?(Array)
ordinal, weekday = occurrence
wday = Date::DAYNAMES.index(weekday)
day = wday
- day = day + 7 if (wday < wday_of_first_of_month)
- day = day - wday_of_first_of_month
- day = day + (ordinal * 7) - 6
+ if ordinal < 0
+ wday_of_last_of_month = Date.new(year, month, -1).wday
+ day = day + 7 if wday <= wday_of_last_of_month
+ day = day - wday_of_last_of_month + (ordinal * 7) - 1
+ else
+ wday_of_first_of_month = Date.new(year, month, 1).wday
+ day = day + 7 if (wday < wday_of_first_of_month)
+ day = day - wday_of_first_of_month
+ day = day + (ordinal * 7) - 6
+ end
day
else
occurrence
end
end