当前位置 : 主页 > 编程语言 > ruby >

ruby-on-rails – 如何从开始日期开始每隔7天获取一段时间的日期

来源:互联网 收集:自由互联 发布时间:2021-06-23
如何从开始日期开始每隔7天获取一段时间的日期. 我有一个调度程序应该在其开始日期时间设置为每个时区发送推送通知后每7天运行一次. 例如. start_time run_every end_time20-july-2016 10:00:0
如何从开始日期开始每隔7天获取一段时间的日期.

我有一个调度程序应该在其开始日期时间设置为每个时区发送推送通知后每7天运行一次.

例如.

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

那么我将从2016年7月20日上午10点起每7天运行一次调度程序.那将是7月28日,4月8日,11月8日等等.

问题是它应该针对所有时区运行,以便澳大利亚用户可以在2016年7月20日10:00:00收到通知,美国用户也应该在2016年7月20日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用于递归计算.

网友评论