2012-07-04 104 views
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 
  • 如果今天是14月則順序應該是A B C
  • 如果今天是6月16日,然後順序應該是:B C A
  • 最後如果今天是1-Feb然後訂單應該是:A B C

謝謝你提前回復。

+0

請告訴我們您的實際模型和控制器。否則,很難給出一個好的答案。 –

回答

1

假設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 } 
+0

嗨Stefan,你明白我的觀點,並感謝你提供有用的答案。我只是在實施之前做了一些小改動: 正在運行,others = festivals.partition {| f | (f.started_on.yday..f.stopped_on.yday).INCLUDE? day.yday} previous = others.partition {| f | f.started_on.yday

+0

我剛剛意識到'yday'不適用於閏年。您可以使用'date.month * 31 + date.day'這樣的比較來代替。 – Stefan

相關問題