问题标签 [rrule]
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.
rrule - RRule 能否描述每天在两个特定时间发生的事件?
假设我有一个事件发生在每天晚上 7:00 和下午 2:00。RRule 看起来像这样:
如果我想要在上午 10:00 和下午 2:30 发生的事件,我会假设它看起来像这样:
但这似乎并不正确。规范中说“BYxxx 规则部分在一段时间内低于频率通常会增加或扩大重复出现的次数”。在http://jkbrzt.github.io/rrule/进行测试会产生以下结果:
- 周一 10:00
- 周一 10:30
- 周一 14:00
- 周一 14:30
- 周二 10:00
- 周二 10:30
- 周二 14:00
- 周二 14:30
我真正想要的是:
- 周一 10:00
- 周一 14:30
- 周二 10:00
- 周二 10:30
- 周三 10:00
- 周三 14:30
- 周四 10:00
- 星期四 14:30
javascript - rruleJS:考虑每周案例的时区
我正在使用 rruleJS ( https://github.com/jkbrzt/rrule ) 并且开始日期如下:
开始日期和时间:2015-09-15 23:45 每第三周 工作日:周一、周三、周日
我保存它并得到这个规则:
我现在预计我的复发开始时间是 23:45,
但相反,我得到了这些重复:
这是因为转换为当地时间(CEST-> +2 小时 -> 23:45 变为 01:45)。我可以减去时区偏移,但这会切换到另一个工作日。例如,如果我从 2015 年 9 月 16 日星期三 01:45:00 GMT+0200 (CEST) 减去 2 小时,我将得到 2015 年 9 月 15 日星期二 23:45:00 GMT+0200 (CEST)。
但这不是我想要的:时间是正确的,但不是工作日。我不希望它在周二重演,而是在周一、周三或周日重演。
如何考虑时区但仍保留开始的工作日?
icalendar - 谷歌日历中的 iCal;规则:每隔一个工作日
我的妻子(老师)每隔一个工作日教一次。是否可以制定涵盖该问题的重复规则?我试过了:
...但这没有用。它只是每天,每隔一周。
rfc5545 - RRULE (rfc 5545) 直到计数
我无法理解关于and的rfc5545。据我了解,根据 RFC 的这一部分,UNTIL 和 COUNT 不能在同一个重复规则中:until
count
值名称:RECUR
用途:此值类型用于标识包含重复规则规范的属性。
正式定义:值类型由以下
符号定义:
在 rfc 中进一步说明:
如果指定了多个 BYxxx 规则部分,则在评估指定的 FREQ 和 INTERVAL 规则部分之后,BYxxx 规则部分将按以下顺序应用于当前评估的事件集:BYMONTH、BYWEEKNO、BYYEARDAY、BYMONTHDAY、BYDAY、BYHOUR、BYMINUTE , BYSECOND 和 BYSETPOS; 然后评估 COUNT 和 UNTIL。
最后一段似乎暗示 COUNT 和 UNTIL 可以在同一个 RRULE 中。
当我检查实现 rrule 生成器和解析的库时,没有验证可以确保 COUNT 和 UNTIL 不在同一个递归中。
每个人通常对此进行的一般实施是什么?我们是否应该忽略此验证并在同时存在 COUNT 和 UNTIL 时简单地使用 UNTIL 参数(反之亦然)?RFC 对 COUNT 和 UNTIL 参数的确切含义是什么?
icalendar - 两种不同长度的 iCal rrule
我想在我的日历中输入一个事件,该事件在每周一和周二的 8 点至 3 点和周六的 8 点至 12 点运行。我的应用程序支持规则。是否可以将其打包成一个规则?
如果只是工作日,那么规则会很简单,看起来像:
任何提示表示赞赏。
android - 在日历中添加重复事件时出错
您好我正在尝试创建一个将事件添加到日历的应用程序。例如,我需要在每个星期六创建一个事件,直到 12 月 31 日。以下是我为创建事件设置的属性,
但它会为给定日期 (sDate) 创建一个事件,然后在每个星期六创建。但是我怎样才能避免在给定日期(sDate)创建的一个事件
node.js - 如何在运行 node.js 的服务器上使用时刻 js 和时区偏移将日期从 rrule 字符串转换为 UTC 格式?
在浏览器上,我制作了一个生成 rrule 字符串的小部件:
我还使用此功能从浏览器获取时区偏移量:
我将它们发送到运行 node.js 的服务器。在服务器上,我想使用 rrule 和时区偏移来生成 UTC 格式的日期列表。这是我现在的做法:
似乎我应该能够使用不起作用的函数来获取 UTC 日期,但由于某种原因它们不起作用。我想我错过了一些关于如何使用正确的方式来做到这一点的事情。谁能看到我做错了什么?
standards - iCalendar UNTIL 规则必须与 DTSTART 属性的类型相同?
在iCalendar RFC 5545, section 3.3.10中,我看到以下 UNTIL 参数描述:
UNTIL 规则部分的值必须与“DTSTART”属性具有相同的值类型。此外,如果“DTSTART”属性被指定为带有本地时间的日期,那么 UNTIL 规则部分也必须被指定为带有本地时间的日期。如果“DTSTART”属性指定为带有 UTC 时间的日期或带有本地时间和时区参考的日期,则 UNTIL 规则部分必须指定为带有 UTC 时间的日期。
但是,在3.8.5.3 Recurrence Rule段落中,UNTIL 始终以 UTC 指定,与 DTSTART 属性无关:
总共有5个这样的例子。
我还发现,无论 DTSTART 属性如何,至少有 2 个 CalDAV 客户端(iOS 和 Mozilla Lightning)总是以 UTC 格式提交 UNTIL 参数。
UNTIL 必须始终使用 UTC 的唯一位置是 VTIMEZONE 中的 RRULE。还是我没有得到什么?
icalendar - 如果 DTSTART 的日期不在 BYDAY 指定的日期中,我如何从生成的事件中排除它?
我正在使用google-rfc-2445根据 rfc-2445 生成重复事件:
“VEVENT”的“DTSTART”属性指定事件的包含开始。对于重复事件,它还指定重复集中的第一个实例。
因此,例如每周五发生 5 次的事件的 RRULE:
所以根据rfc-2445它将产生 6 个事件。第一个事件 on Thursday 4 February 2016
,第二个事件 on Friday 5 February 2016
,依此类推。
如果它不在模式中,我如何实现它将排除第一个事件?在上面的示例中,它应该排除第一次出现的4 February 2016
. 如果定义DTSTART;TZID=US-Eastern:20160205T090000
哪个是星期五,则应保留第一次出现。
是否可以通过自行定义此类“排除规则”来完成,RRULE
或者我需要在代码中进行检查,如果DTSTART
与中定义的日期不同,BYDAY
我应该(手动)在代码中查找最接近的日期并DTSTART
相应地进行更改?
更新 好的,根据 rfc-2445 和谷歌组上的这个问题:https ://groups.google.com/forum/#!topic/google-rfc-2445/xqYFe411ysA
“EXDATE”属性可用于排除
“DTSTART”中指定的值。然而,在这种情况下,原始“DTSTART”日期
仍必须由日历和调度系统维护,因为
原始“DTSTART”值与其他属性(例如“RECURRENCE-ID”)具有内在的使用依赖性。
看起来我需要使用EXDATE
属性来实现我需要的东西。尝试通过遵循 RRULE 来实现这一点:
开始日期是:2016-02-10T00:00:00.000+02:00
在以下代码中:
但它只返回 4 个事件,所以它总是删除第一个事件。
cron - 重复事件,如何存储?
我发现了一些关于经常性事件的问题,但我还没有进入一个接近我需要的问题。我正在努力了解如何处理通知系统的重复事件。
到目前为止,我知道两种选择:
存储具有模式的单个事件并动态计算任何未来事件(例如永远重复等)。使用 cron 模式甚至更好的 RRULE 东西。
将所有未来事件存储为单个事件,直到某个日期。
我对选项 1 的问题是我需要我的事件来保存一些其他数据,例如确认,如果我有重复事件,我可能需要为每个重复事件保存多个确认。这变成了一个令人讨厌的黑客来使事情正常进行,我什至不想考虑如何处理显示与其他数据相关联的过去和未来事件。
选项 2 更好,因为即使在单个事件中我也可以存储与每个相关的所有额外数据。问题在于处理未来事件。首先,如果事件永远重复,那么我应该存储多少事件。如果用户想要显示尚未生成的未来事件,我是否只是做块并即时生成?这个选项也感觉像一个黑客。
到目前为止,我已经阅读了一些关于 RRULE 的内容,发现我可以将 rrule.js 用于前端,将其他一些包用于后端。
编辑 1:为了更好地澄清,我没有完全准备好使用完整的 iCal 格式标准,我想只使用 RRules。但是,我可能会改变主意,因为我仍在寻找选择。
iCal Vevents 和 rrules 应该如何存储在数据库中?