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



我想为具有许多预订的项目获取日期范围内的平面日期数组。预订有:start_date:end_date

例如,商品具有以下预订:

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

最新更新