日历上的重复事件:RFC 5545 Javascript解析

Recurring events on a calendar : RFC 5545 Javascript parsing

本文关键字:RFC 5545 Javascript 解析 事件 日历      更新时间:2023-09-26

我需要将循环事件集成到完整日历的改编版本中,该版本添加了允许离线事件浏览的javascript模块。

我正在寻找一个可以根据RFC 5545解析重复事件的javascript库。

我需要能够列出在2个日期(开始日期和结束日期)之间发生的所有循环事件,使用RRULE和EXDATE并解释每日,每周,每月和每年的循环。

我花了几个小时寻找一些毫无价值的东西,我不想重新发明轮子....有人可以请指出我在正确的方向为现有的javascript解析器?

我检查了skyporters rrule_parser,发现它不支持所有的规则(特别是,它不会正确地做BYDAY)。我发现了一个绝妙的选择:

https://github.com/jakubroztocil/rrule

他们积极支持这个库,并有一个很好的演示网站,展示了所有的功能。您可以从5545格式或纯文本(使用nlp扩展)进行解析。据我所知,它功能齐全。

查看https://github.com/skyporter/rrule_parser.

希望对你有帮助。

这是一个jquery的递归小部件,用于解析/创建RFC5545兼容的递归字符串。

https://github.com/collective/jquery.recurrenceinput.js

但是,

不会将递归规则扩展为发生日期。但是它包含一个python服务器,它可以为您做这些,使用python-dateutil: http://labix.org/python-dateutil

我自己也需要这个功能,以及时区支持,所以我做了一个typescript/javascript库:rSchedule.

目前支持除BYSETPOS、BYWEEKNO和BYYEARDAY以外的所有ICAL递归规则。支持与ICAL格式之间的序列化以及大量额外的东西。

的例子:

const rule = new RRule({
  frequency: 'YEARLY',
  byMonthOfYear: [2, 6],
  byDayOfWeek: ['SU', ['MO', 3]],
  start: new Date(2010,1,7),
}, {
  dateAdapter: StandardDateAdapter
})
let index = 0;
for (const date of rule.occurrences()) {
  date.toISOString()
  index++
  if (index > 10) break;
}
rule.occurrences({
  start: new Date(2010,5,7),
  take: 5
})
  .toArray()
  .map(date => date.toISOString())