如何获取一段时间内从开始日期算起的每 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/