如何使用 RRULE 部件来实现“一个月两次”?

tar*_*ryn 1 icalendar rfc5545

我将以下一组重复规则映射到 RFC5545 RRULE(以创建 Google 日历事件):

  • 绝不
  • 日常的
  • 每周
  • 每隔一周
  • 每月两次
  • 每4周
  • 每月
  • 隔月
  • 每3个月
  • 每4个月
  • 一年两次
  • 每年
  • 每隔一年

其中一些比其他更容易(考虑 Every4Weeks 与 TwiceAMonth)并且已经实施。


假设这可以用 RRULE 表示,并且我有一个开始日期2017/08/24(如果开始日期相关)我的 RRULE 需要满足什么条件,例如,TwiceAMonth


奖励:如果有人提出“每隔一周”、“一年两次”等的 RRULE,我将永远感激不尽。

anm*_*ari 6

要编写 RRULE 代码,需要非常具体。“每周/每月/每年两次”——如果你对一个人说这句话,他们能算出 2019 年的确切日子吗?

每个序列都需要一个 DTSTART,对于依赖于该日期或由该日期确定的重复序列肯定需要它。EG:每隔一周需要一天开始,并且可能每 14 天或每 2 周重复一次。一个月两次:哪天?星期几相关?天数是由月初还是月底决定的?

您可以使用 FREQ、INTERVAL 和所有“BY's BYDAY、BYMONTHDAY、BYSETPOS 等”的组合。一些“扩展”天数,一些“限制”天数。

规范本身有一些示例https://icalendar.org/iCalendar-RFC-5545/3-8-5-3-recurrence-rule.html。以下是更多示例:

每月1日和15日两次

RRULE:FREQ=MONTHLY;BYMONTHDAY=1,15
Run Code Online (Sandbox Code Playgroud)

每个月的第一个和第三个星期四两次

DTSTART;TZID=America/New_York:20170824T000000
RRULE:FREQ=MONTHLY;BYDAY=1TH,3TH
Run Code Online (Sandbox Code Playgroud)

从 2018 年 8 月 24 日起每隔一周

DTSTART;TZID=America/New_York:20170824T000000
RRULE:FREQ=WEEKLY;INTERVAL=2
Run Code Online (Sandbox Code Playgroud)

每年 2 月和 8 月的第 2 天到最后一天两次

RRULE:FREQ=YEARLY;BYMONTHDAY=-2;BYMONTH=2,8
Run Code Online (Sandbox Code Playgroud)

一年两次的最后一天和第 50 天

RRULE:FREQ=YEARLY;BYSETPOS=-1,50
Run Code Online (Sandbox Code Playgroud)

有许多可能的组合。https://icalevents.com/2447-need-to-know-the-possible-combinations-for-repeating-dates-an-ical-cheatsheet/