0

我正在使用 Ice Cube gem https://github.com/seejohnrun/ice_cube来安排活动,我想让每个活动在每周一出现在应用程序中,并且在 6 小时后活动标题应该用红色标记.

在 doc ice cube 中有这个设置持续时间的例子

# or give the schedule a duration and ask if occurring_at?
schedule = IceCube::Schedule.new(now, :duration => 3600)
schedule.add_recurrence_rule IceCube::Rule.daily
schedule.occurring_at?(now + 1800) # true

我将其翻译为我的需要如下:

start_date = Time.now.utc - 10.days # any datetime basically
schedule = IceCube::Schedule.new(start_date, :duration => (6.hours).seconds)
schedule.add_recurrence_rule IceCube::Rule.weekly(1).day(:monday)

但据我所知,6 小时的持续时间似乎只适用于第一次发生(从 start_date 开始的 6 小时),我想要的是从每周一、每周开始的 6 小时。

4

1 回答 1

0

我正在寻找类似的东西,所以我偶然发现了你的问题。如果您还没有弄清楚这一点,这就是有效的方法。

因此,首先我们为事件设置 end_time:

start_date = Time.now.utc - 10.days
schedule = IceCube::Schedule.new(start_date, end_time: start_date + 6.hours.seconds)
schedule.add_recurrence_rule IceCube::Rule.weekly(1).day(:monday)

我们还制定了每周规则(每周一)。现在我们看到这对于发生的情况很好,例如

schedule.next_occurrences(6)
# [2019-12-09 10:01:13 UTC, 2019-12-16 10:01:13 UTC, 2019-12-23 10:01:13 UTC, 2019-12-30 10:01:13 UTC, 2020-01-06 10:01:13 UTC, 2020-01-13 10:01:13 UTC]

让我们看看上面列出的第一次出现的“持续时间”:

# The event has started
schedule.occurring_at? Time.utc(2019, 12, 9,  10, 1, 14)
# true
# Almost 6 hours later
schedule.occurring_at? Time.utc(2019, 12, 9,  16, 1, 12)
# true
schedule.occurring_at? Time.utc(2019, 12, 9,  16, 1, 13)
# false
# The event just ended

因此,如果您检查事件occurring_at?,您将能够更改所需的颜色。如果我们为事件设置持续时间,那么在该持续时间之后,事件将停止。但是,如果我们设置一个所有事件在和end_time之间的时间段内都可以正常工作start_timeend_time

于 2019-12-05T11:09:36.760 回答