Ruby on Rails:使用开始和结束日期范围创建一个平面日期数组

时间:2017-10-17 15:04:48

标签: ruby-on-rails arrays ruby date

我希望在包含许多预订的项目的日期范围内获得一组平面日期。预订有: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"]

1 个答案:

答案 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"]