2016-06-24 5 views
0

В моей заявке хранятся операции с day_number от 1 до 31 и рядом hours. Любая деятельность относится к timesheet, которая содержит month и year.Получить число дней в неделю

Теперь я хочу получить обзор со всеми неделями в году и с общим количеством часов активности на этой неделе. Я определяю недели месяца с:

first_week = Date.new(timesheet.year,timesheet.month,1).strftime("%U").to_i 
last_week = Date.new(timesheet.year,timesheet.month,1).end_of_month.strftime("%U").to_i 
weeknrs = (first_week..last_week).to_a 
weeknrs.each do |weeknr| 
    # Do something 
end 

Как определить числа дней, принадлежащих определенной неделе?

ответ

0

я решил использовать week-of-month драгоценный камень, который дает мне week_split метод, который возвращает массив со всеми недель месяца и каждую неделю все дни: Date.new(2012,1,1).week_split возвращается:

[[1, 2, 3, 4, 5, 6, 7], 
    [8, 9, 10, 11, 12, 13, 14], 
    [15, 16, 17, 18, 19, 20, 21], 
    [22, 23, 24, 25, 26, 27, 28], 
    [29, 30, 31]] 

Теперь я могу легко перебора этот массив и запрос для деятельности:

- weeks = Date.new(year,month,1).week_split 
- weeks.each do |week| 
    - activities = Activity.where("month = ? AND year = ? AND day IN (?)", timesheet.month, timesheet.year, week) 
6

Пожалуйста, попробуйте этот

1..7.each do |i| 
Date.commercial(timesheet.year, weeknr, i) 
end 

Для получения дополнительной ссылки, смотрите сразу

http://ruby-doc.org/stdlib-2.3.1/libdoc/date/rdoc/Date.html#method-c-commercial

Надежда, это поможет вам.

+0

Спасибо, но это будет не хватать деятельности с номерами день между 8 и 31. – John

+0

поставив выше логики в свой «weeknrs» петли. вы получите весь день между first_week и прошлой неделей. Ex. Date.commercial (2016, 1, 1), где 2016 год - год, средний 1 - неделя, а последний 1 - понедельник. –

+0

А теперь я понимаю, что вы имеете в виду, я пропустил конкретный коммерческий метод. – John

Смежные вопросы