Ruby on Rails:使用开始日期和结束日期范围创建日期的平面阵列
我想为具有多个预订的项目在日期范围内获取平面数组日期。预订有:start_date
和:end_date
。Ruby on Rails:使用开始日期和结束日期范围创建日期的平面阵列
例如,项目具有这些预订:
Booking A: 10/1/17 to 10/3/17
Booking B: 11/2/17 to 11/4/17
我用勇气尝试。 Item.bookings.pluck[:start_date, :end_date]
和它给了我一个数组,看起来像这样[["10,01,17", "10,03,17"], ["11,02,17" , "11,04,17" ]]
我需要的是一个扁平阵列的日期范围这样["10,01,17", "10/02/17", "10,03,17", "11,02,17" , "11,03,17", "11/04/17"]
那么,为了得到范围,则需要实际的Date对象。为了让您的字符串像您的字符串一样,您需要使用Date.strptime
。然后,你可以建立范围从日期对,然后再转换回字符串与Date#strftime
:
require 'date'
format = '%m/%d/%y' # mm/dd/yy; adjust as needed
dates = Item.bookings.pluck(%i<start_date end_date>).map do |bounds|
Range.new(*bounds.map { |d| Date.strptime(d, format) }).map do |d|
d.strftime(format)
end
end.flatten
与您的示例数据集给了我这样的:
["10/01/17", "10/02/17", "10/03/17", "11/02/17", "11/03/17", "11/04/17"]
感谢您的回复。我收到一个错误消息:不支持的参数类型:符号。改为构建一个Arel节点。 –
这听起来像'pluck'不喜欢作为参数的符号数组?我认为这就是你在原始代码中发送的内容。 'pluck'调用应该看起来就像为你工作的任何东西;这与我的解决方案没有任何关系。它的其余部分没有涉及任何Rails的东西;它只是纯粹的Ruby。 –
你要有之间的日期数组中的日期X和日期Y? –
(Date.today..Date.today + 10.days).to_a – eezee
在我的控制器中,我想写一个查询并传递给一个实例变量。我可以查询Item.bookings.pluck(:start_date,:end_date),那会给我一个开始和结束日期的数组。我需要首先获取包括每个数组的开始日期和结束日期的范围,然后平铺数组,以便所有日期都在一个数组中,如示例中所示。谢谢! –