我将以下一组重复规则映射到RFC5545 RRULE(以创建Google日历事件):
其中一些方法比其他方法更容易(考虑Every4Weeks vs TwiceAMonth),并且已经实现。
假设这可以用RRULE表示,并且我的开始日期为2017/08/24
(如果开始日期相关),我的RRULE需要满足什么条件,例如TwiceAMonth
?< / p>
奖金:如果有人提出“每隔一周”,“一年两次”等规则,我将万分感谢。
答案 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