=> [#<WelcomeCall id: 16, call_at: "2013-11-06 12:00:00">,
#<WelcomeCall id: 17, call_at: "2013-11-06 13:00:00">,
#<WelcomeCall id: 18, call_at: "2013-11-06 17:00:00">,
#<WelcomeCall id: 19, call_at: "2013-11-06 14:00:00">]
我希望从所有这些 WelcomeCall 对象中获得一系列小时数。
=> [12, 13, 17, 14]
WelcomeCall是rails model。
我用过那个:
def self.scheduled_hours date
by_date(date).map do |wc|
wc.call_at.hour
end
end
但也许有更好的方法?
答案 0 :(得分:3)
您想使用map
。
尝试这样的事情:
new_array = old_array.map{ |welcome_call| welcome_call.call_at.strftime('%H').to_i }
假设您的welcome_call.call_at是日期。如果它不是Date对象,请尝试:
new_array = old_array.map do |welcome_call|
date = Date.parse(welcome_call.call_at)
date.strftime('%H').to_i
end
答案 1 :(得分:0)
您可以迭代数组并使用strftime('%H').to_i
解析call_at datetime对象。
答案 2 :(得分:0)
welcome_calls.map {|w| w.hour}
将日期解析为字符串然后将字符串重新解析为Fixnum并不像我想的那么快。
答案 3 :(得分:0)
我只是尝试过一些有效的方法,我不确定这是不是正确的方法。
var = Model.all
t = var.collect(&:call_at)
hours_arr = []
t.each do |value|
hours_arr << value.time.hour
end