in lib/twitter_cldr/formatters/calendars/date_time_formatter.rb [296:368]
def week_fields_for(date)
week_data_cache[date] ||= begin
eyear = date.year
day_of_week = date.wday + 1
day_of_year = date.yday
first_day_of_week = 1
minimal_days_in_first_week = 1
year_of_week_of_year = eyear
rel_dow = (day_of_week + 7 - first_day_of_week) % 7
rel_dow_jan1 = (day_of_week - day_of_year + 7001 - first_day_of_week) % 7
woy = (day_of_year - 1 + rel_dow_jan1) / 7
if (7 - rel_dow_jan1) >= minimal_days_in_first_week
woy += 1
end
if woy == 0
year_length = (Date.new(eyear, 1, 1) - Date.new(eyear - 1, 1, 1)).to_i
prev_doy = day_of_year + year_length
woy = week_number(prev_doy, day_of_week)
year_of_week_of_year -= 1
else
last_doy = (Date.new(eyear + 1, 1, 1) - Date.new(eyear, 1, 1)).to_i
if day_of_year >= (last_doy - 5)
last_rel_dow = (rel_dow + last_doy - day_of_year) % 7
if (last_rel_dow < 0)
last_rel_dow += 7
end
if ((6 - last_rel_dow) >= minimal_days_in_first_week) && ((day_of_year + 7 - rel_dow) > last_doy)
woy = 1;
year_of_week_of_year += 1
end
end
end
{
week_of_year: woy,
year_woy: year_of_week_of_year,
week_of_month: week_number(date.mday, day_of_week),
day_of_week_in_month: (date.mday - 1) / 7 + 1
}
end
end