如何使用RRULE零件实施“每月两次”?

时间:2019-01-06 15:38:29

标签: icalendar rfc5545

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

  • 从不
  • 每日
  • 每周
  • 每个其他星期
  • TwiceAMonth
  • 每4周
  • 每月
  • 每隔一个月
  • 每3个月
  • 每4个月
  • TwiceAYear
  • 每年
  • 其他年份

其中一些方法比其他方法更容易(考虑Every4Weeks vs TwiceAMonth),并且已经实现。


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


奖金:如果有人提出“每隔一周”,“一年两次”等规则,我将万分感谢。

1 个答案:

答案 0 :(得分:1)

要编码一个RRULE,需要非常具体。 “每周/每月/每年两次”-如果您对人类说的话,他们是否能够算出2019年的确切日期?

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

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

规范本身包含一些示例https://icalendar.org/iCalendar-RFC-5545/3-8-5-3-recurrence-rule.html。这里还有更多示例:

每月1号和15号两次

renderSearchResults() {
    if (!this.props.events.successfully) {
        return
    }
    //This don't work
    /*
 return (
     <View>
         {
             this.props.events.data.data.filter(flt =>
                 flt.location.toLowerCase().includes(this.state.searchText.toLowerCase()))
                 .map(item => {
                     alert(item)
                     return (<View style={style.searchResultsWrapper} key={'ev' + item.id}>
                         <EventItem data={item}></EventItem>
                     </View>)
                 })
         }
     </View>
 )
 */
    //This Works
    return (
        <View>
            {
                this.props.events.data.data.map(item => {
                    return (
                        <View style={style.searchResultsWrapper} key={'ev' + item.id}>
                        <EventItem data={item}></EventItem>
                        </View>
                    )
                })
            }
        </View>
    )
}

在第一个和第三个周四每月两次

RRULE:FREQ=MONTHLY;BYMONTHDAY=1,15

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

DTSTART;TZID=America/New_York:20170824T000000
RRULE:FREQ=MONTHLY;BYDAY=1TH,3TH

每年2月和8月2日至最后一天两次

DTSTART;TZID=America/New_York:20170824T000000
RRULE:FREQ=WEEKLY;INTERVAL=2

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

RRULE:FREQ=YEARLY;BYMONTHDAY=-2;BYMONTH=2,8

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