每个月的第 5 天(如果是周末或假期,则为第 4/3 天)使用 iCal 进行活动

Event every 5th day of mont (or 4th/3rd if it's weekend or holiday) using iCal

在巴西,我的发薪日是每个月的第 5 天。

但如果第 5 天是 saturday/sunday,则付款将在第 4 天发生。

如果第 4 天是 saturday/sunday:则付款将在第 3 天发生。等等。

有什么方法可以创建可与 Google 日历和 iCal 一起使用的活动吗?

您可以使用 iCalendar 实现这一点,至少就周末而言。

考虑以下规则:

DTSTART;TZID=US-Eastern:20160505T000000
RRULE:FREQ=MONTHLY;BYMONTHDAY=1,2,3,4,5;BYDAY=MO,TU,WE,TH,FR;BYSETPOS=-1

规则评估如下:

  • FREQ=MONTHLY;BYMONTHDAY=1,2,3,4,5:扩展到每个月的第1、2、3、4、5天
  • BYDAY=MO,TU,WE,TH,FR:按工作日过滤,仅保留工作days/remove周末
  • BYSETPOS=-1:只保留集合的最后一天

您可以在 http://recurrence-expansion-service.appspot.com/

验证结果

这是first 100 instances

虽然节假日不可能实现这一点。


更新:

实际上指定

就足够了
RRULE:FREQ=MONTHLY;BYMONTHDAY=3,4,5;BYDAY=MO,TU,WE,TH,FR;BYSETPOS=-1

由于周末最多有 2 天,发薪日必须在每月的第 3、4 或 5 天中的一天。同样,这没有考虑假期。

假期总是需要特别考虑。 RRULE 不仅不支持任意日期的这种逻辑,有时很难甚至不可能通过 RRULE 本身来表达假期。在某些国家/地区,某些假期总是在特定的一天,除非这些天是周末,在这种情况下,假期是在周末之前的星期五或之后的星期一。或者考虑复活节日期和相对于复活节日期的假期,它们根本不能用 RRULE 表示。 不要忘记某些假期可能会不时更改(例如某些国家/地区的 "King's days" 或 "Queen's days")。

您可以做的最好的事情是手动管理这些并添加一个 RDATE 和一个 EXDATE,如果发薪日根据上面的 RRULE 适逢假期。