我有需要根據 created_at 日期以 2 周為增量顯示的調查回復。輸出應該是這樣的:
{10/1:4 10/15:6 10/29:3}
...第一周是從調查回應中最早的 created_at 日期開始創建的,最后一周也是如此,但最新的 created_at 日期。從group_by{ |s| s.created_at.month}每周的星期一開始,我每隔一周就會看到類似但不是這樣的事情。任何幫助將非常感激!
uj5u.com熱心網友回復:
您可以計算當前記錄和最早記錄之間的天數,然后使用模 14:
oldest_date = YourModel.minimum(:created_at).to_date
your_relation.group_by { |record|
(record.created_at.to_date - oldest_date).modulo(14)
}
uj5u.com熱心網友回復:
您可以定義一個回傳年和周范圍的方法,例如:
def by_year_and_by_two_weeks(my_date)
wk = my_date.strftime("%W").to_i/2
wks = [wk, wk.odd? ? wk 1 : wk - 1].sort # <== adjust this
[my_date.year, wks]
end
將%W在Rails使用星期一作為一周的第一天。
所以,當你有你的物件時:
object.created_at #=> 2021-09-19 08:58:16.78053 0200
by_year_and_by_two_weeks(object.created_at) #=> [2021, [17, 18]]
然后就可以使用分組的方法了。
objects.group_by { |d| by_year_and_by_two_weeks(d.created_at) }
這是值轉換后的結果示例,使其可讀:
{[2021, [20, 21]]=>[2021-10-14 09:00:17.421142 0200, 2021-10-15 09:00:17.421224 0200, 2021-10-06 09:00:17.421276 0200, 2021-10-10 09:00:17.421328 0200], [2021, [18, 19]]=>[2021-09-22 09:00:17.421385 0200]}
當然,您可以更改by_year_and_by_two_weeks最適合您的回傳值。
uj5u.com熱心網友回復:
您的要求:
- 您希望在每兩周開始的星期一進行分組。
- 您希望該組的哈希鍵是該星期一的日期。
我還將添加另一個面向未來的要求:
- 開始和結束日期可以在任何地方,甚至可以跨越年份邊界。
如果我們接受這些要求,然后利用modulospickermann的想法,我們可以像這樣構建它:
start_date = first_item.created_at.to_date.prev_occurring(:monday)
your_items.group_by { |item|
item_date = item.created_at.to_date
days_from_start = item_date - start_date
biweekly_offset = days_from_start.modulo(14)
biweekly_monday = item_date - biweekly_offset
biweekly_monday
}
例子:
test_dates = [
Date.new(2021, 10, 1),
Date.new(2021, 10, 6),
Date.new(2021, 10, 10),
Date.new(2021, 10, 13),
Date.new(2021, 10, 20),
Date.new(2021, 10, 31)
]
start = test_dates.first.prev_occurring(:monday)
pp test_dates.group_by { |date|
days_from_start = date - start
biweekly_offset = days_from_start.modulo(14)
biweekly_monday = date - biweekly_offset
biweekly_monday
}
輸出:
{ Mon, 27 Sep 2021 => [Fri, 01 Oct 2021, Wed, 06 Oct 2021, Sun, 10 Oct 2021],
Mon, 11 Oct 2021 => [Wed, 13 Oct 2021, Wed, 20 Oct 2021],
Mon, 25 Oct 2021 => [Sun, 31 Oct 2021] }
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/330621.html
標籤:sql 红宝石 活动记录 ruby-on-rails-6 rails-activejob
上一篇:回傳按頂級域分組的哈希
