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

#ruby #date #week-number

#ruby #Дата #неделя- номер

Вопрос:

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

Ответ №1:

 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} 
 

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

Комментарии:

1. Мне больше нравится ваш другой ответ, потому что он использует определение, в то время как этот ответ просто …. работает: P

2. Ну, в Википедии тоже упоминается 28 декабря: en.wikipedia.org/wiki/ISO_week_date#Last_week , третий пункт.

3. Википедия 2, rwilliams 0. Еще раз спасибо.

Ответ №2:

 require 'date'
def num_weeks(year = Date.today.year)
  # all years starting with Thursday, and leap years starting with Wednesday have 53 weeks
  # http://en.wikipedia.org/wiki/ISO_week_date#Last_week
  d = Date.new(year, 1, 1)
  return 53 if d.wday == 4
  return 53 if d.leap? and d.wday == 3
  52
end
 

Комментарии:

1. Как насчет d.wday == 4 || d.leap? amp;amp; d.wday == 3 ? 53 : 52 ?

2. Хороший материал. Я пропустил этот раздел об определении 53-недельного года в Википедии.

Ответ №3:

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

 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