【问题标题】:How to generate RRULE for recurring events with multiple BYSETPOS values?如何为具有多个 BYSETPOS 值的重复事件生成 RRULE?
【发布时间】:2018-07-18 03:20:07
【问题描述】:

我正在尝试为每个月的第一个和第二个星期一和星期二发生的事件定义一个 RRULE。这相当于每月发生四次事件。我认为这是正确的:

FREQ=MONTHLY;INTERVAL=1;BYSETPOS=1,2;BYDAY=MO,TU

但它只会在每个月的第一个星期一/星期二生成事件。如果我删除星期二,它将在该月的第一个和第二个星期一生成事件。为什么我不能指定多个 BYSETPOS 值(正如 RRULE spec 似乎允许的那样)以及多个 BYDAY 值?

如何正确定义这样的规则,因为很明显这不是正确的方法?

显然我没有清楚地理解 BYSETPOS 属性。
上面链接的文档指出:

bysetpos - 如果给定,它必须是整数或整数序列, 正面或负面。每个给定的整数将指定一次出现 编号,对应于规则内第 n 次出现 频率周期。例如,如果与 -1 相结合,则 bysetpos 每月频率和(MO,TU,WE,TH,FR)的工作日,将 结果是每个月的最后一个工作日。

所以我认为使用 BYSETPOS 来指定频率周期内所需的出现是正确的(作为整数序列)。

感谢您的指导。

【问题讨论】:

    标签: rrule


    【解决方案1】:

    如何正确定义这样的规则

    就像这样:BYDAY=1MO,1TU,2MO,2TU

    来自RFC 5545的相关引用:

      Each BYDAY value can also be preceded by a positive (+n) or
      negative (-n) integer.  If present, this indicates the nth
      occurrence of a specific day within the MONTHLY or YEARLY "RRULE".
    
      For example, within a MONTHLY rule, +1MO (or simply 1MO)
      represents the first Monday within the month, whereas -1MO
      represents the last Monday of the month.
    

    为什么我不能指定多个 BYSETPOS 值(正如 RRULE 规范似乎允许的那样)以及多个 BYDAY 值?

    您可以 - 实际上您使用 BYSETPOS=1,2 指定了 2。您要求获得第一个和第二个结果。但是您希望每个月出现 4 次(第一个星期一、第一个星期二、第二个星期一、第二个星期二),因此如果您真的想要使用 BYSETPOS:BYSETPOS=1,2,3,4,则应该指定 4 次出现。不过我不推荐BYSETPOSBYDAY 更清晰,更易于理解。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-05-25
      • 2023-03-31
      • 2017-08-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多