问题标签 [rfc5545]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
icalendar - 从扩展的 iCalendar RRule 确定事件
我正在阅读 RFC 5545 并尝试确定如何正确找到一组事件。假设我有一个 WEEKLY rrule = 2(每隔一周)。我还为 Tue、Wed、Thu 指定了 BYDAY 规则部分。假设我的开始日期是 2011 年 4 月 7 日(星期四),我的结束日期是 2011 年 4 月 27 日(星期三)。显然忽略不重要的日期,我认为我的事件集将包含:2011-04-07、2011-04-12、2011-04-13、2011-04-21、2011-04-26、2011-04- 27.
让我失望的是 RFC 中的以下声明:“WKST 规则部分指定工作周的开始日期。有效值为 MO、TU、WE、TH、FR、SA 和 SU。当每周“RRULE”的间隔大于 1,并且指定了 BYDAY 规则部分。
因此,如果我的 WKST=MO,我从上述语句中看到了一个暗示,即一周不是从开始日期开始,而是从 WKST 开始。这意味着不是使用基于开始日期的一周,在这种情况下,周四至周三,我需要实际从 WKST 开始,并确定哪些事件发生在该周(周一至周日)以及从该 WKST 开始的每隔一周. 因此,出于计算目的,我的开始日期实际上是 2011-04-04。那是在开始日期之前,所以我跳到开始日期,但我坚持周一至周日。这意味着我的事件集实际上是:2011-04-07、2011-04-19、2011-04-20、2011-04-21。这与我原来的设置有很大不同。
此外,如果这是计算的正确方法,这是否也意味着在扩展具有 >1 间隔的其他频率的规则情况时,我必须在该期间的开始而不是开始日期“开始”。MONTHLY 是否包含开始日期当月的第一天 - 最后一天。YEARLY 是否包括开始日期当年的 1 月 1 日 - 12 月 31 日?
我希望那里有一位 iCalendar 大师……我无法理解这里的逻辑。谢谢。
更新:我确实创建了一些 .ics 文件并导入谷歌日历。假设谷歌正确解释了这些,我可以确认使用 INTERVAL>1 的扩展 MONTHLY 将使用该月的第一天到最后一天,而不是从事件的开始日期开始的一个月。YEARLY 规则以相同的方式工作,年份从 1 月 1 日到 12 月 31 日。不是我最初的预期,但希望这可以帮助其他人。
javascript - 生成 iCal 格式的 Javascript 库?
有谁知道是否有任何生成 iCal 格式的 JavaScript 库?(RFC 5545 或 RFC 2445 标准)
如果它还为它提供用户界面,那就太好了。类似于 OWA 重复窗口或 Google 日历重复弹出窗口。
谢谢你。
icalendar - 如何从 iCalendar RRULE 获取发生日期列表
我有带有 RRULE 的 iCalendar 文件以供出现。如何根据 iCal 文件中的给定开始日期和 RRULE 获取事件将发生的日期列表。
在 Java 中,我想编写一个方法,它应该采用开始日期和 RRULE 并返回发生日期列表。请帮助提供简单的解决方案或指示。
icalendar - 排除 iCalendar 中的时间段
我有一个非常简单的事件“每周一 9 点到 5 点”以及一些不发生此事件的时间段。比如 7.8.2011 到 24.10.2011。在 iCalendar 中表示这一点的最佳方式是什么?
很多EXDATE?特殊的 EXRULE?
java - ICal4j 中的重复规则
我正在尝试使用Ical4j.ics
创建一个文件。
但是当我尝试添加重复时它失败了,抛出一个:ValidationException
我添加重复的代码是:
如果没有这条规则,它可以正常工作,但我想在每个星期一添加这个事件,
直到12 December 2011
(返回的日期dateTo
)。有任何想法吗?
php - 我可以阻止 iCal 缓存我的 PHP 生成的 iCalendar 提要吗?
我使用 PHP 制作了一个动态生成的 iCalendar 提要,遵循 RFC 5545。它在大多数情况下工作得很好,除了 iCal(即 Mac OS X 的内置日历程序)似乎拒绝反映之前已经下载的事件的更新. 我假设这是由于缓存。有没有办法告诉 iCal 不要缓存我的提要?
编辑:哦,是的,我忘了提到每次调用提要时我已经尝试让每个 VEVENT 都有不同的 UID(我的 UID 格式是“id”,RFC 5545 的 DATE-TIME 格式的当前时间在哪里,并且是我数据库中事件的唯一 ID)。我也尝试过在标题中使用 Content-type;无论我将其设置为 text/plain 还是 text/calendar,都会出现此问题
mysql - 重复事件、SQL 查询
我知道有关重复事件的问题很常见,但除了与日历应用程序有关的重复事件之外,我还没有找到一个回答这个关于重复事件的特定问题的答案。主要区别在于我们应用程序中的事件。只会在报告中或单独出现,而不是在日历格式中,尽管在许多方面它们非常相似,可能只是与日历相关的包袱更少。
与日历应用程序类似。事件可以一次性发生,也可以重复发生,例如每个星期四或每个月的第一个星期一,直到将来某个预先设定的时间。
这些事件存储在一个事件表中,其中包含开始和结束日期以及“循环类型 ID”。如果“recurrency type”为“None”,则开始日期和结束日期将相同。事件表包含一个单独的表的 ID,该表包含事件类型名称,例如“会议”或“每周报告”
还有一个包含“循环类型”列表的表格,例如“不重复”、“每周一”、“每月的第一个星期一”和“每月的最后一个星期六”。
为了使查找更容易,另一个表包含从 1960 年到 2060 年的日期列表以及每个日期的相关信息,例如是否是星期一,以及该月中的哪个星期一。
这允许进行如下查找:
这正是查找重复事件所需要的,输出如下:
要获得无重复事件,可以使用更简单的查询:
我的问题是:如何将这些查询组合起来,得出一个包含所有事件的列表,包括按日期顺序重复和不重复的事件?
这些是表格和它们的缩短选择,为简洁起见,一些列和所有索引已被删除:)。出于同样的原因,未包含“名称”表。
我们并非绝对使用上述代码或表格布局,欢迎任何可行的解决方案。请不要将我指向:
在构建日历应用程序时,我应该在我的数据库中存储日期或重复规则吗?
或者
https://www.rfc-editor.org/rfc/rfc5545
我已经检查了它们,它们非常有用,但没有像我们预期的那样做。
TIA
icalendar - 检测 iCal 文件中的更改
我正在编写一个插入 Google 日历(或其他 iCal 支持的服务)并显示事件提醒的小型桌面应用程序。它会每隔一段时间自动重新下载 iCal 文件。如果文件校验和已更改,我会丢弃当前的约会缓存并重新解析日历。
问题是,这不适用于 Google 日历文件。经过进一步检查,我注意到每次我重新下载与某个日历关联的 iCal 文件时,所有事件的DTSTAMP:
属性都会发生变化。所以标准校验和可能不是这里的方法。我正在考虑两种主要的解决方案。
- 根据原始文件计算校验和,并
DTSTAMP:
丢弃行。(肮脏的) - 实现一个完整的日历差异算法,检测日历的哪些部分是新的,哪些已被丢弃,哪些已更改等(昂贵)
我不知道iCal格式是否还有其他我还没有发现的怪癖,所以我不知道方法1是否能解决我的问题。有限的测试似乎表明确实如此。另一方面,就 CPU 功率而言,方法 2 似乎不必要地昂贵。
你有什么建议?
icalendar - iCalendar (RFC5545) 重复规则一天多次
如何使用 RFC5545 中指定的 RRULE 使事件每天发生多次?
假设我希望每隔一周的周一和周五上午 11 点和晚上 18 点举行一次活动。是否可以像下面这样格式化 RRULE:
RRULE:FREQ=WEEKLY;INTERVAL=2;BYDAY=MO,FR;[TIMES=110000,180000]
谢谢
c# - 是否有存储和解析日历日期重复字符串的标准?
我正在尝试将重复事件信息存储到数据库中。我想将记录器存储到具有以下字段的数据库表中。
- 开始日期 - 日期时间
- 结束日期 - 日期时间
- RecurrencePattern - 字符串
我想看看是否已经有一些标准格式来存储 RecurrencePattern 和一个关联的库来解析这个字符串 recurrenPattern 和一个开始/结束日期并转换成一组日期。我看到这适用于 javascript,所以可能是 C# 的端口或类似的东西?
要将事件序列化到数据库,我真的必须创建一个新的 iCalendar 并为每个事件序列化一个日历吗?有没有办法使用这个库简单地将事件本身序列化到数据库?
根据 Jon Skeet 的回答更新了关于 DDay.iCal 的问题:
根据 jon skeet 的建议,我开始查看 DDay.iCal,它看起来非常好。我的一个后续问题是,在示例中,它似乎一次只能从磁盘读取一个完整的 ical (ics)。就我而言,我只是将事件独立存储在数据库表中。最好的方法是什么:
- 从数据库中读取这些事件
- 将独立事件保存到数据库(每个事件都是数据库表中的一行)
使用这个库?