2015-06-22 40 views
-1

獲取特定日期的對象我有一個數組叫周:從一個數組

[Mon, 08 Jun 2015, Tue, 09 Jun 2015, Wed, 10 Jun 2015, Thu, 11 Jun 2015, Fri, 12 Jun 2015, Sat, 13 Jun 2015, Sun, 14 Jun 2015] 

我需要從數組週一至週五,並沒有使用它們的索引。 有沒有辦法做到這一點?

+1

這是無效的紅寶石陣列。 – mudasobwa

+2

@mudasobwa我懷疑這是打印到irb中的有效數組的結果。 –

+0

你是什麼意思「得到星期一/星期五」?你的意思是在「星期一」條目之後獲得類似於日期的對象嗎?爲什麼你需要它不使用索引? (最簡單的答案是獲得「星期一」的指數,然後採取下一個) –

回答

3

Ruby提供了Date#monday?Date#friday方法來確定日期是否符合特定的工作日。

因此,要在數組中查找週一,假設陣列由Date情況

array.find(&:monday?) 

,如果它是由Time實例,然後

array.find { |time| time.to_date.monday? } 

如果你想同時獲得星期一和星期五,只需使用select

# for Date 
array.select { |date| date.monday? || date.friday? } 
# for Time 
array.select { |time| date = time.to_date && (date.monday? || date.friday?) } 
+0

這是高超和簡潔。我知道必須有一個簡單的方法。 –

+0

很好的答案。請注意,有一個方法[Date#to_date](http://ruby-doc.org/stdlib-2.2.0/libdoc/date/rdoc/Date.html#method-i-to_date),它返回'self',這意味着您的'Time'實例的解決方案也適用於'Date'實例。 –

+1

@ user2556665如果解決了您的問題,請接受答案 –

0
week = [Mon, 08 Jun 2015, Tue, 09 Jun 2015, Wed, 10 Jun 2015, Thu, 11 Jun 2015, Fri, 12 Jun 2015, Sat, 13 Jun 2015, Sun, 14 Jun 2015] 

假設這些都在那裏Date對象,你可以問每一個,如果他們一定平日:

week.select { |d| d.monday? || d.friday? }