如何根据一天返回未来日期列表(例如,星期一到日期结束的日期)?

时间:2014-10-07 16:29:38

标签: ruby-on-rails ruby ruby-on-rails-4

所以我有一个预订系统,用户可以预订一个时间段。

时间段按日期和时间列出:

Wednesday - 10am to 2pm

Wednesday - 3pm to 9pm

Sunday - 3pm - 7pm

Tuesday 12pm - 4pm

我需要做的是根据所选时段返回一些未来日期。因此,例如,如果我要选择上面的星期日插槽,则另一个选择字段将填充日期。

日期将以日期和月份格式显示:

5th June

8th May

30th September

日期仅为星期日或在时段下拉列表中选择的任何一天。

我还需要一些方法来限制返回的日期。所以也许将来每个星期天最多6个月。

我已经看了一下API,似乎找不到任何东西。

非常感谢您的帮助。

感谢您的时间。

3 个答案:

答案 0 :(得分:4)

要获取未来6个月特定日期的即将到来的日期列表,您可以使用类似的内容。

require 'date'

start_date = Date.today
end_date = 6.months.from_now
weekday = 0 # 0 for Sunday, 6 for Saturday
dates = (start_date..end_date).to_a.select { |day| day.wday == weekday }

之后,您可以根据需要设置日期格式

dates.map { |date| date.strftime("#{date.day.ordinalize} %B %Y") }
=> # 12th October 2014
   # 19th October 2014
   # 26th October 2014
   # ...

答案 1 :(得分:0)

一个方法如何获取选择了几天的数组参数,并返回一个范围内的日期,然后根据您的需要对其进行格式化。

def valid_date_range(days)
  days.map! {|day| day.to_date.wday}
  today = Date.today
  till_date = Date.today + 1.month
  valid_dates = (today..till_date).to_enum.select {|date| days.include?(date.wday)}
  valid_dates.map {|date| date.to_formatted_s(:short) }
end

因此,如果您需要周一和周五,您可以拨打date_range(["星期一","星期五"]),它会返回一个数组:

[" 7 Oct", "13 Oct", "14 Oct", "20 Oct", "21 Oct", "27 Oct", "28 Oct", " 3 Nov", " 4 Nov"]

或者,您可能只想玩till_date来获取当前几个月的日期,例如" Date.today.end_of_month"得到:

 ["10 Oct", "13 Oct", "17 Oct", "20 Oct", "24 Oct", "27 Oct", "31 Oct"]

答案 2 :(得分:0)

与构建日期范围的解决方案略有不同,而是构建一系列偏移,然后构建日期。

start_date = Date.new(2014,10,15)
day_offsets = (0..180).find_all { |i| i % 7 == 0 }
dates = day_offsets.map { |d| (DateTime.now + d).to_date}