Skip to content

Instantly share code, notes, and snippets.

@levinalex
Created December 1, 2008 22:27
Show Gist options
  • Save levinalex/30875 to your computer and use it in GitHub Desktop.
Save levinalex/30875 to your computer and use it in GitHub Desktop.
# return the date at which the week with the given number starts
# (ISO-8601)
#
# Date.beginning_of_numbered_week(2003, 52) # => 2003-12-22
# Date.beginning_of_numbered_week("2003W52") # => 2003-12-22
#
def self.beginning_of_numbered_week(year, week = nil)
if week
year, week = year.to_i, week.to_i
else
year, week = year.scan(/(\d{4})-?W(\d{1,2})/)[0].map(&:to_i)
end
raise ArgumentError unless year and week
first_week_of_year = Date.new(year.to_i, 1, 4).monday
start_day = first_week_of_year + ((week-1) * 7).days
raise ArgumentError if start_day.year > year
return start_day
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment