我希望在包含许多预订的项目的日期范围内获得一组平面日期。预订有:start_date
和:end_date
。
例如,Item有这些预订:
Booking A: 10/1/17 to 10/3/17
Booking B: 11/2/17 to 11/4/17
我尝试使用pluck。 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"]
答案 0 :(得分:1)
好吧,为了获得范围,你需要实际的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"]