ruby-on-rails - 我怎样才能得到从开始日期开始的每 7 天的日期一段时间

标签 ruby-on-rails ruby ruby-on-rails-4

如何获取一段时间内从开始日期算起的每 7 天的日期。

我有一个计划程序,它应该在其开始日期时间设置后每 7 天运行一次,以便为每个时区发送推送通知。

例如。

   start_time              run_every          end_time
20-july-2016 10:00:00      7_days       25-dec-2016 10:00:00

然后我将从 20-july-2016 at 10 am. that will be 28-july, 4-aug, 11-aug and so on. 开始每 7 天运行一次调度程序

问题是它应该在所有时区运行,以便澳大利亚用户可以在 20-jul-2016 10:00:00 收到通知,美国用户也应该在 20-jul-2016 10 收到通知: 00:00。

为此,我在 start_date, start_date+1.days, start_date-1.days 上运行调度程序因为我的服务器在 UTC 时区,所以它可以占用每个时区的上午 10 点。

我想不出以 7 天为间隔运行它的方法。我如何获取下一个运行日期并每天检查我今天应该运行此通知?

最佳答案

要获取 UTC 运行日期列表,您可以使用以下命令:

(1.month.ago.utc.to_i..1.week.from_now.utc.to_i).
  step(7.days).
  map { |v| Time.at(v).utc }

# => [2016-06-18 17:27:18 UTC, 2016-06-25 17:27:18 UTC, 2016-07-02 17:27:18 UTC, 2016-07-09 17:27:18 UTC, 2016-07-16 17:27:18 UTC, 2016-07-23 17:27:18 UTC]

从这一点开始,您应该能够执行您喜欢的任何时区调整。请注意,Range 具有时区感知方法,例如 step_with_time_with_zone .

您还可以考虑使用 whenever gem用于 cron 调度(如果你使用它)或 ice_cube gem用于递归计算。

关于ruby-on-rails - 我怎样才能得到从开始日期开始的每 7 天的日期一段时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38439731/

相关文章:

ruby-on-rails - rails : link_to into another controller with params

mysql - bundle 安装 ROR 时出现错误 'mysql.h is missing'

ruby-on-rails - Rails gem localized_country_select 未定义的方法

ruby-on-rails - 由于 ACTIVE RECORD : CONNECTION NOT ESTABLISHED,无法启动 Rails 服务器以连接到 postgres

ruby - 经常将 irb 历史刷新到文件

ruby-on-rails - 嵌套属性未插入表中

mysql - 在执行之前记录查询

ruby-on-rails - 我如何解决 Rails 中的 "index unique_schema_migrations already exists"?

jquery - 在 Rails CoffeeScript 和 Ajax 中传递数据 json

ruby-on-rails-4 - 为添加该字段之前创建的行填充 object_changes 字段