首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Ruby:将十进制的day转换为day as name

Ruby:将十进制的day转换为day as name
EN

Stack Overflow用户
提问于 2011-09-27 00:18:45
回答 4查看 3K关注 0票数 6

是否可以将strftime("%u")值快速转换为strftime("%A"),或者我是否需要构建一个等价的散列,如{“星期一”=> 1,.........“星期日”=> 6}

我有一个以某天为十进制值的数组

代码语言:javascript
复制
class_index=[2,6,7]

我想循环遍历这个数组来构建一个天数数组,如下所示

代码语言:javascript
复制
[nil, "Tuesday", nil, nil, nil, "Saturday", "Sunday"]

所以我可以这样做

代码语言:javascript
复制
class_list=[]
class_index.each do |x|
  class_list[x-1] = convert x value to day name
end

这有可能吗?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2011-09-27 00:24:56

这样如何:

代码语言:javascript
复制
require "date"
DateTime.parse("Wednesday").wday # => 3

哦,我现在明白你已经扩展了你的问题。这样如何:

代码语言:javascript
复制
[2,6,7].inject(Array.new(7)) { |memo,obj| memo[obj-1] = Date::DAYNAMES[obj%7]; memo }

让我来解释一下:

代码语言:javascript
复制
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

红宝石的美丽。

票数 7
EN

Stack Overflow用户

发布于 2011-09-27 00:29:34

将小数转换为工作日:

代码语言:javascript
复制
require 'date'
Date::DAYNAMES[1]
# => "Monday"

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

代码语言:javascript
复制
class_list=[]
class_index.each do |x|
  class_list[x-1] = Date::DAYNAMES[x-1]
end
票数 5
EN

Stack Overflow用户

发布于 2011-09-27 00:32:03

下面是我脑海中浮现的一个方法:

代码语言:javascript
复制
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
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7558074

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档