Вычисление количества недель в году с помощью Ruby

Есть ли способ в Ruby рассчитать количество недель (ISO 8601) для данного года? В настоящее время я использую таблицу поиска, и я хотел бы прекратить ее использовать.


person rwilliams    schedule 31.10.2011    source источник


Ответы (3)


def num_weeks(year = Date.today.year)
  Date.new(year, 12, 28).cweek # magick date!
end

long_iso_years = (2000..2400).select{|year| num_weeks(year) == 53} 

Выдает тот же список, что и в википедии.

person steenslag    schedule 31.10.2011
comment
Мне больше нравится ваш другой ответ, потому что он использует определение, а этот ответ просто .... работает: P - person rwilliams; 31.10.2011
comment
Что ж, в википедии тоже упоминается 28 декабря: en.wikipedia.org/wiki/ISO_week_date#Last_week , третий пункт. - person steenslag; 31.10.2011
comment
Wikipedia 2, rwilliams 0. Еще раз спасибо. - person rwilliams; 31.10.2011

Вы можете сделать следующее:

require 'date'
@year = 2001 #year you want to count the number of weeks
d = Date.new @year, 12, 30 # as in Date.new 
d.cweek # returns the commercial week number for the last week of the year, in this case, 52

если это то, что вы ищете :)

PS: это работает только для коммерческого года, поэтому в 2001 году 31 декабря было коммерческой неделей 1.

person Elland    schedule 31.10.2011

person    schedule
comment
Как насчет d.wday == 4 || d.leap? && d.wday == 3 ? 53 : 52? - person Michael Kohl; 31.10.2011
comment
Хорошая вещь. Я пропустил этот раздел об определении 53-недельного года в Википедии. - person rwilliams; 31.10.2011