1

私は次のフェスティバルの配列を持っています:

id = 1, Start_date = 2011-11-01 , End_date = 2016-12-31

[[1, 2011-11-01 , 2016-12-31],
[2, 2011-11-28 , 2016-12-31],
[3, 2011-10-01 , 2015-12-31],
[4, 2011-11-28 , 2021-12-31],
[5, 2010-11-15 , 2016-12-31],
[6, 2011-07-01 , 2017-12-31],
[7, 2012-02-01 , 2013-02-19],
[8, 2011-03-21 , 2015-04-30],
[9, 2012-03-01 , 2016-03-20]]

これを現在の日付から開始して並べ替える必要がありstart_dateますが、ここでは年を無視します(月と日のみを使用します)。

実はこれらはお祭りの開始日と終了日です。最初に実行中のフェスティバル(順序:start_date)を表示し、次に今後のフェスティバル(順序:start_date)を表示する必要があります。

例えば:

festival A: start_date: 15-may  - end_date: 15-june  
festival B: start_date: 01-june - end_date: 20-june
festival C: start_date: 01-oct  - end_date: 30-oct
  • 今日が6月14日の場合、注文はA B C
  • 今日が6月16日の場合、注文は次のようになります。B C A
  • そして最後に、今日が2月1日の場合、順序は次のようになります。A B C

よろしくお願いします。

4

1 に答える 1

3

start_dateend_dateDateオブジェクトであると仮定すると、次のようになります。

# get the festivals from the database
festivals = Festival.all

# define the day of interest
day = Date.today

# partition the festivals into running and upcoming
# based on the day of the year (1-366)
running, upcoming = festivals.partition { |f|
  (f.start_date.yday..f.end_date.yday).include? day.yday
}

# sort each array by day of the year
running.sort_by!{ |f| f.start_date.yday }
upcoming.sort_by!{ |f| f.start_date.yday }
于 2012-07-04T10:30:00.073 に答える