Получить номера календарных недель в запрашиваемом месяце в RoR

Я ищу уже несколько часов и никак не могу найти правильный ответ.
Надеюсь, вы сможете мне помочь.

Руби: 1.9.3p194
Рельсы: 3.2.8

Цель:

1.9.3p194 :001 > get_weeknumbers_in_month 1, 2012
=> [1, 2, 3, 4]
1.9.3p194 :002 > get_weeknumbers_in_month 2, 2012
=> [5, 6, 7, 8]
1.9.3p194 :003 > get_weeknumbers_in_month 3, 2012
=> [9, 10, 11, 12, 13]
1.9.3p194 :004 > get_weeknumbers_in_month 4, 2012
=> [14, 15, 16, 17]

Итак, мне действительно нужен массив номеров календарных недель, когда вызывается метод get_weeknumbers_in_month.


Исследовать:

Чтобы получить номера месяцев из даты:

DateTime.parse("2012-01-10").month
=> 1



Чтобы получить количество дней в месяце:

Time::days_in_month(1, 2012)
=> 31



Чтобы получить номер календарной недели даты:

DateTime.parse("2012-04-12").strftime("%W").to_i
=> 15



Может ли кто-нибудь помочь мне с этой проблемой?

Заранее спасибо.


person Carsten    schedule 06.11.2012    source источник
comment
возможный дубликат количества недель Rails в месяце   -  person BvuRVKyUVlViVIc7    schedule 06.11.2012


Ответы (1)


Насколько я понимаю, вы почти закончили! последнее - вычислить первую и последнюю даты месяца, не так ли? Так что что-то вроде следующего может работать (не проверено)

def get_weeknumbers_in_month(month, year)
  first_week_num = Date.new(year,month,1).strftime("%U").to_i
  last_week_num = Date.new(year,month,1).end_of_month.strftime("%U").to_i
  (first_week_num..last_week_num).to_a
end
person Fivell    schedule 06.11.2012
comment
Благодарю вас! Я действительно был близок :o Только теперь месяц может возвращать 6-недельные номера. Правильно? И, если смотреть на Солнце, 1 января. Это будет на 52-й неделе, поэтому массив останется пустым. a = (52..3).to_a #=> [] Итак, теперь осталось только отфильтровать это и расставить числа в правильном порядке. if start_of_month_in_week == 0 && end_of_month_in_week != 0; weeks.push(52); weeks.push (1..end_of_month_in_week).to_a - person Carsten; 06.11.2012
comment
Я знаю, я редактировал свой комментарий из-за [enter] вместо [shift]+[enter] ;-) - person Carsten; 06.11.2012
comment
ммм, я не понял ситуацию с пустым результатом. как я могу его воспроизвести? - person Fivell; 06.11.2012
comment
на самом деле, я все еще не понимаю, как первый день любого месяца может дать вам номер 52-й недели) - person Fivell; 07.11.2012
comment
Ах да, 01-01-2012 приходится на воскресенье 52-й недели 2011 года. - person Carsten; 07.11.2012
comment
Сюда? 1.9.3p125 :021 > DateTime.parse("2012-01-01").strftime("%W").to_i => 0 1.9.3p125 :022 > DateTime.parse("2012-01-01").strftime("%U").to_i => 1 - person Fivell; 07.11.2012
comment
Действительно, если начальный день приходится на 52-ю неделю предыдущего года, он вернет ноль. - person Carsten; 07.11.2012