加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-17 01:36:28 所属栏目:百科 来源:网络整理
导读:如何从开始日期开始每隔7天获取一段时间的日期. 我有一个调度程序应该在其开始日期时间设置为每个时区发送推送通知后每7天运行一次. 例如. start_time run_every end_time20-july-2016 10:00:00 7_days 25-dec-2016 10:00:00 那么我将从2016年7月20日上午10
如何从开始日期开始每隔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用于递归计算.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读