week_fields_for

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