我正在寻找一种有效的方法,Ruby 1.9.x/Rails 3.2.x、 在两个DateTime对象之间以一小时的步长进行迭代.

('2013-01-01'.to_datetime .. '2013-02-01'.to_datetime).step(1.hour) do |date|
   ...
end

我明白这其中的一个问题是,1.hour只是秒数,但我试图将其转换为DateTime对象,并将其用作步骤也不起作用.

我看了看"Beware of Ruby Sugar".它在底部提到DateTime有一个直接的step方法.我通过在DateTime对象上运行methods来确认这一点,但我在Ruby或Rails的文档中都找不到DateTime中step的任何文档.

推荐答案

与我在"How do I return an array of days and hours from a range?"中的回答类似,诀窍是使用to_i来处理自大纪元以来的秒数:

('2013-01-01'.to_datetime.to_i .. '2013-02-01'.to_datetime.to_i).step(1.hour) do |date|
  puts Time.at(date)
end

请注意,Time.at()使用本地时区进行转换,因此您可能希望使用Time.at(date).utc指定UTC

Ruby-on-rails相关问答推荐

如何使用 activerecord activerecord-session_store 在 Rails 应用程序中使用 cookie 值在数据库中查找会话记录

验证以确保唯一性但忽略空值?

有没有办法在 Rails 3.1 中检测用户代理

Rails 3:如何正确显示textarea中的文本?

Rails 3:验证组合值

Rails 4网站图标问题

Ruby on Rails:在模型中验证还是在数据库中验证更好?

删除链接在 Rails 3 视图中发送Get而不是Delete

Rails 5:无法从参数中检索哈希值

在具有唯一约束的关联中使用 Rails 中的 factory_girl.得到重复的错误

rmagick 和 OS X Lion

Rails - 具有空数组的强参数

如何在 ROR (Ruby) 中显示 PDF?

ActiveRecord 查找现有表索引

通过 Ruby 或 Rails 的 LDAP

counter_cache 实现的问题

submit_tag rails 表单中的 bootstrap 图标

redirect_to 和 render 是可交换的吗?

如何在两个字段上对 ruby​​/rails 进行排序?

Ruby 中有与 slice 函数相反的函数吗?