如何从日期时间属性数组中获取时间?

时间:2013-11-07 09:55:17

标签: ruby-on-rails ruby datetime

=> [#<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

但也许有更好的方法?

4 个答案:

答案 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