Ruby:将日期作为小数转换为日期作为名称

时间:2011-09-26 16:18:45

标签: ruby date

是否可以快速将strftime(“%u”)值转换为strftime(“%A”)或者我是否需要构建等价哈希,如{“Monday”=> 1,.........“星期日”=> 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 个答案:

答案 0 :(得分:6)

怎么样:

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的美丽。

答案 1 :(得分:5)

从小数到工作日:

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

因此,在您的示例中,您可以执行以下操作:

class_list=[]
class_index.each do |x|
  class_list[x-1] = Date::DAYNAMES[x-1]
end

答案 2 :(得分:1)

这是我想到的一种方式:

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

答案 3 :(得分:0)

class_index=[2,6,7]

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

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

请注意,日期名称为0到6,因此您可以在0到6之间工作,也可以将模数设为7