Ruby on rails Ruby group_按日期每7天一次
如何按周开始和结束日期对记录集合进行排序?在看了strf之后,我能得到的最接近的结果是按周数分组Ruby on rails Ruby group_按日期每7天一次,ruby-on-rails,ruby,Ruby On Rails,Ruby,如何按周开始和结束日期对记录集合进行排序?在看了strf之后,我能得到的最接近的结果是按周数分组 weeks = my_data.group_by{|x| x.created_at.strftime('%U %Y') } {"34 2015"=> [#<DoctorRecommendation:0x007fd663196ea0 created_at: Tue, 25 Aug 2015 22:29:44 UTC +00:00, patient_profile
weeks = my_data.group_by{|x| x.created_at.strftime('%U %Y') }
{"34 2015"=>
[#<DoctorRecommendation:0x007fd663196ea0
created_at: Tue, 25 Aug 2015 22:29:44 UTC +00:00,
patient_profile_id: 104,],
"33 2015"=>
[#<DoctorRecommendation:0x007fd663194ce0
created_at: Thu, 20 Aug 2015 13:41:37 UTC +00:00,
patient_profile_id: 21,,
#<DoctorRecommendation:0x007fd66319f500
created_at: Tue, 18 Aug 2015 02:47:30 UTC +00:00,
patient_profile_id: 61,
#<DoctorRecommendation:0x007fd66319db38
created_at: Tue, 18 Aug 2015 02:47:29 UTC +00:00,
patient_profile_id: 85,
]
}
weeks=my_data.group_by{x|x.created_at.strftime(“%U%Y”)}
{"34 2015"=>
[#
[#这里的代码可以满足您的需求,但需要大量的日期解析。Ruby方面的高手可能会对此进行优化
my_data.group_by do |x|
date = Date.parse(x.created_at.strftime("%F"))
monday = date - date.strftime("%u").to_i
sunday = monday + 7
"#{monday.strftime("%F")} - #{sunday.strftime("%F")}"
end
我的另一个建议是查询在日期和今天创建的最小值,用ruby非常快地生成这段时间内的所有星期,然后进行查询。如果您获得所有数据,这会比较慢,但如果您只需要几周,则会快得多。下面的代码可以满足您的需要,但需要大量的日期解析。有人更擅长Ruby可能会对此进行优化
my_data.group_by do |x|
date = Date.parse(x.created_at.strftime("%F"))
monday = date - date.strftime("%u").to_i
sunday = monday + 7
"#{monday.strftime("%F")} - #{sunday.strftime("%F")}"
end
我的另一个建议是查询在日期和今天创建的最小值,用ruby非常快地生成这段时间内的所有星期,然后进行查询。如果您获得所有数据,这会比较慢,但如果您只需要几周,则会快得多。下面的代码可以满足您的需要,但需要大量的日期解析。有人更擅长Ruby可能会对此进行优化
my_data.group_by do |x|
date = Date.parse(x.created_at.strftime("%F"))
monday = date - date.strftime("%u").to_i
sunday = monday + 7
"#{monday.strftime("%F")} - #{sunday.strftime("%F")}"
end
我的另一个建议是查询在日期和今天创建的最小值,用ruby非常快地生成这段时间内的所有星期,然后进行查询。如果您获得所有数据,这会比较慢,但如果您只需要几周,则会快得多。下面的代码可以满足您的需要,但需要大量的日期解析。有人更擅长Ruby可能会对此进行优化
my_data.group_by do |x|
date = Date.parse(x.created_at.strftime("%F"))
monday = date - date.strftime("%u").to_i
sunday = monday + 7
"#{monday.strftime("%F")} - #{sunday.strftime("%F")}"
end
我的另一个建议是查询date和today创建的最小值,使用ruby非常快速地生成这两周之间的所有周,然后进行查询。如果获取所有数据,速度会较慢,但如果只需要几周,速度会快得多。您可以使用Rails的日期扩展来获取一周的开始和结束时间(可配置),并使用
要创建您的范围,请执行以下操作:
weeks = my_data.group_by do |x|
date = x.created_at
left = date.beginning_of_week.strftime('%-m/%-d/%Y')
right = date.end_of_week.strftime('%-m/%-d/%Y')
"#{left} - #{right}"
end
您可以使用Rails的日期扩展来获取一周的开始和结束(可配置),并使用
要创建您的范围,请执行以下操作:
weeks = my_data.group_by do |x|
date = x.created_at
left = date.beginning_of_week.strftime('%-m/%-d/%Y')
right = date.end_of_week.strftime('%-m/%-d/%Y')
"#{left} - #{right}"
end
您可以使用Rails的日期扩展来获取一周的开始和结束(可配置),并使用
要创建您的范围,请执行以下操作:
weeks = my_data.group_by do |x|
date = x.created_at
left = date.beginning_of_week.strftime('%-m/%-d/%Y')
right = date.end_of_week.strftime('%-m/%-d/%Y')
"#{left} - #{right}"
end
您可以使用Rails的日期扩展来获取一周的开始和结束(可配置),并使用
要创建您的范围,请执行以下操作:
weeks = my_data.group_by do |x|
date = x.created_at
left = date.beginning_of_week.strftime('%-m/%-d/%Y')
right = date.end_of_week.strftime('%-m/%-d/%Y')
"#{left} - #{right}"
end
2015年10月8日至2015年8月16日和2015年8月17日至2015年8月23日至2015年8月10日至2015年8月17日至2015年8月23日至2015年8月16日和2015年8月17日至2015年8月23日至2015年8月10日至2015年8月16日和2015年8月17日至2015年8月23日至2015年8月23日