Ruby: преобразовать день как десятичное число в день как имя - PullRequest
6 голосов
/ 26 сентября 2011

Можно ли быстро преобразовать значение strftime ("% u") в значение strftime ("% A") или мне нужно создать хеш эквивалентности, такой как {"Monday" => 1, ......... "Sunday" => 6}

У меня есть массив с одним днем ​​в виде десятичных значений

class_index=[2,6,7]

, и я хотел бы перебрать этот массив для построения и массиваназвание дня, как это

[nil, "Tuesday", nil, nil, nil, "Saturday", "Sunday"]

, чтобы я мог сделать

class_list=[]
class_index.each do |x|
  class_list[x-1] = convert x value to day name
end

Это вообще возможно?

Ответы [ 4 ]

6 голосов
/ 26 сентября 2011

Как насчет:

require "date"
DateTime.parse("Wednesday").wday # => 3

О, теперь я вижу, что вы расширили свой вопрос.Как насчет:

[2,6,7].inject(Array.new(7)) { |memo,obj| memo[obj-1] = Date::DAYNAMES[obj%7]; memo }

Позвольте мне объяснить это:

input = [2,6,7]
empty_array = Array.new(7) # => [nil, nil, nil, nil, nil, nil, nil]
input.inject(empty_array) do |memo, obj| # loop through the input, and
                                         # use the empty array as a 'memo'
  day_name = Date::DAYNAMES[obj%7]       # get the day's name, modulo 7 (Sunday = 0)
  memo[obj-1] = day_name                 # save the day name in the empty array
  memo                                   # return the memo for the next iteration
end

Красота Ruby.

5 голосов
/ 26 сентября 2011

Чтобы перейти от десятичного числа к рабочему дню:

require 'date'
Date::DAYNAMES[1]
# => "Monday"

Итак, в вашем примере вы можете просто сделать:

class_list=[]
class_index.each do |x|
  class_list[x-1] = Date::DAYNAMES[x-1]
end
1 голос
/ 26 сентября 2011

Вот один из способов, который приходит на ум:

require "date"

def weekday_index_to_name(index)
  date = Date.parse("2011-09-26") # Canonical Monday.
  (index - 1).times { date = date.succ }
  date.strftime("%A")
end
0 голосов
/ 08 мая 2014
class_index=[2,6,7]

class_index.map{|day_num| Date::DAYNAMES[day_num%7]}

#=> ["Tuesday", "Saturday", "Sunday"]

обратите внимание, что названия дней от 0 до 6, поэтому вы можете работать с 0 до 6 или иметь их по модулю 7

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...