如果设置了 dtstart,RRule 不会设置正确的时间

Dan*_*ndt 3 rrule reactjs

我尝试创建一个 rrule 实例,然后设置开始日期/时间 (dtstart),但事件得到错误的时间。

  1. 我使用基本 rrule 字符串初始化 rrule 实例: RRULE:FREQ=WEEKLY;INTERVAL=1;WKST=MO;COUNT=20
  2. 我将 dtstart 日期设置为rrule.options: rrule.options.dtstart = new Date(Date.UTC(2019, 1, 4, 12, 30, 0))
  3. 我通过 console.logrrule.all()查看生成的事件。所有事件现在都具有当前时间,而不是通过 dtstart 设置的时间。它应该显示 12:30

我制作了这个沙箱来演示这个问题。

现在,当我在rrule.js 演示页面中执行完全相同的操作时,我得到了正确的结果。在此演示页面上,执行以下操作以了解我的意思: 在此输入图像描述

结果如下:

在此输入图像描述

正如您所看到的,事件的时间设置正确!

任何建议表示赞赏!

Dan*_*ndt 6

找到了答案:

如果在构造函数中显式设置distart,那么问题就解决了。

比较这些例子:

示例一:给出正确结果:

const rrule = new RRule({
  freq: RRule.WEEKLY, 
  interval: 1, 
  wkst: RRule.MO, 
  count: 20,
  dtstart: new Date(Date.UTC(2019, 1, 4, 12, 30, 0))})
Run Code Online (Sandbox Code Playgroud)

示例二:给出错误结果

const rrule = new RRule({
  freq: RRule.WEEKLY, 
  interval: 1, 
  wkst: RRule.MO, 
  count: 20})
rrule.options.dtstart = new Date(Date.UTC(2019, 1, 4, 14, 30, 0));
Run Code Online (Sandbox Code Playgroud)

对我来说,这看起来有点违反直觉,因为无论您是在构造函数中设置还是之后设置,设置 dtstart 都应该始终给出相同的结果。