使用iCal每蒙特第5天(如果是周末或假日,则为第4 /第3天)活动

时间:2016-05-08 21:45:18

标签: calendar google-calendar-api icalendar

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

但如果第5天是星期六/星期日,那么付款将在第4天发生。

如果第四周六/星期日,则相同:然后付款将在第3天发生。等等。

有没有办法创建适用于Google日历和iCal的活动?

1 个答案:

答案 0 :(得分:4)

您可以通过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:按工作日过滤,仅保留工作日/删除周末
  • 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表达。 不要忘记,有些假期可能会偶尔发生变化(例如&#34;国王和#34;或者&#34;女王的日子和#34;在某些国家/地区)。

您可以做的最好的事情就是手动管理这些内容,并根据上面的RRULE,如果发薪日会在假期中发生,则添加RDATE和EXDATE。