0

私はこれを達成する方法を知っていますが、それを行うためのルビーの方法のようには見えません。

週の日のハッシュがあります:

DAYS = {
1 => "Monday",
2 => "Tuesday",
3 => "Wednesday",
4 => "Thursday",
5 => "Friday",
6 => "Saturday",
7 => "Sunday"}

(おそらくこれにはいくつかのRailsヘルパーがありますが、私はそれを私が考えることができる最速の方法で実装しました)

ここで、最初の要素が今日であり、他の日は順序付けられたままである配列を作成したいと思います。

これがこの配列です

 def day_keys
    # proper sorting of days, start with today and then continue
    day_array = (1..7).to_a
    loop do
      break if day_array.first == Time.now.wday
      day_array.rotate!
    end
    day_array
  end

今日は金曜日なので、戻ります[5,6,7,1,2,3,4]。この後、この配列の値をDAYSハッシュのキーにマップして、曜日の名前を見つけます。

解決策は私にはかなりラフに思えるので、これを実装する方法についていくつかのアイデアを聞きたいと思います。私はしばらく見てきましたArray#cycleEnumerable#inject、私のニーズに合うものは何もないようです。

4

4 に答える 4

5

どうですか: ((Time.now.wday)..(Time.now.wday+6)).collect{|i| ((i-1) % 7) +1}

レールを使用している場合は、さらにいくつかのヘルパーがあります。これにより、日付の配列が生成されます。

 ((Time.now.to_date)..(6.days.from_now.to_date)).collect{|i| i}

曜日名が必要な場合は、少し変更するだけです

 ((Time.now.to_date)..(6.days.from_now.to_date)).collect{|i| i.strftime "%A"}
于 2012-06-01T13:34:20.037 に答える
2

このようなものはうまくいくでしょう...

DAYS_HASH = { 'Mon' => 1,
'Tue', => 2,
'Wed', => 3,
'Thu', => 4,
'Fri', => 5 }

DAYS_ARY = ['Mon','Tue','Wed','Thu','Fri']

def days(start)
  DAYS_ARRAY.rotate(start-1)
end

days(DAYS_HASH['水曜日'])

=> ['Wed', 'Thu', 'Fri', 'Mon', 'Tue']
于 2012-06-01T13:39:39.547 に答える
1

Ruby 1.8.7 を使用している場合

day_array.index(Time.now.wday).times do day_array.push(day_array.shift) end

Ruby 1.9.2 を使用している場合

day_array.index(Time.now.wday).times do day_array.rotate end
于 2012-06-01T13:47:03.257 に答える
1
require 'date'
today = Date.today
p (today..today+6).map{|day| Date::DAYNAMES[day.wday]}
#=>["Friday", "Saturday", "Sunday", "Monday", "Tuesday", "Wednesday", "Thursday"]
于 2012-06-01T13:53:25.930 に答える