Ruby:将十进制日期转换为星期几名称

6

是否可以快速将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

这真的可能吗?

2
星期一是1号,星期日是6号?你可能需要重新检查一下;-) - rdvdijk
4个回答

7
如何呢:
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 - Daniel Brockman
有没有类似于Date :: DAYNAMES的等价物来获取.wday的方法? - Yannick Schall
2
Date::DAYNAMES.index("Saturday") # => 6 - rdvdijk
如果你想让星期一等于0,星期天等于6,你可以使用 Date::DAYNAMES[(i+1)%7] - ideasasylum

5

从十进制转换为星期几:

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

所以,在你的例子中,你可以简单地这样做:
class_list=[]
class_index.each do |x|
  class_list[x-1] = Date::DAYNAMES[x-1]
end

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

0
class_index=[2,6,7]

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

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

请注意,星期名称从0到6,因此您可以从0到6工作,或者将其对7取模。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接