gpt4 book ai didi

javascript - rruleJS : Consideration of timezone for weekly case

转载 作者:行者123 更新时间:2023-11-28 19:00:47 26 4
gpt4 key购买 nike

我正在使用 rruleJS ( https://github.com/jkbrzt/rrule ),并且开始日期如下:

开始日期和时间:2015-09-15 23:45每第三周工作日:周一、周三、周日

我保存它并得到这个规则:

FREQ=WEEKLY;INTERVAL=3;DTSTART=20150915T234500Z;BYDAY=MO,WE,SU

我现在预计复发的开始时间是 23:45,

Wed Sep 16 2015 23:45:00 GMT+0200 (CEST), 
Sun Sep 20 2015 23:45:00 GMT+0200 (CEST),
Mon Oct 05 2015 23:45:00 GMT+0200 (CEST),
Wed Oct 07 2015 23:45:00 GMT+0200 (CEST),

...

但是我得到了这些重复:

Wed Sep 16 2015 01:45:00 GMT+0200 (CEST), 
Sun Sep 20 2015 01:45:00 GMT+0200 (CEST),
Mon Oct 05 2015 01:45:00 GMT+0200 (CEST),
Wed Oct 07 2015 01:45:00 GMT+0200 (CEST),
Sun Oct 11 2015 01:45:00 GMT+0200 (CEST),
....

这是因为转换为本地时间(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)。

但这不是我想要的:时间是正确的,但不是工作日。我不希望它在周二重复,而是在周一、周三或周日发生。

如何在考虑时区的同时仍保留起始工作日?

最佳答案

我们遇到了类似的问题,因为我们在服务器端以 UTC 存储重复规则,但在客户端使用 RRule.js 编写规则。我们仍然希望能够在客户端生成日期供用户预览。

我们的解决方案是使用本地时区的 dtstartuntil 时间偏移量创建 RRule 对象的副本。我们使用此副本来生成预览日期。

我们必须在多个地方执行此操作,以便很容易在 RRule 上编写扩展方法:

RRule.prototype.toOffsetRRule = function () {
var localRule;
var offset;

localRule = RRule.fromString(this.toString());

var dtstart = localRule.origOptions.dtstart;
if (dtstart) {
offset = dtstart.getTimezoneOffset();
localRule.origOptions.dtstart = new Date(dtstart.getTime() + offset * 60000);
}

var until = localRule.origOptions.until;
if (until) {
offset = until.getTimezoneOffset();
localRule.origOptions.until = new Date(until.getTime() + offset * 60000);
}

localRule = new RRule(localRule.origOptions);
return localRule;
}

然后,每当我们需要在客户端生成日期时,我们都会调用此方法并根据 RRule 的本地时区副本生成日期:

var localRule= myRule.toOffsetRRule();
var dates = localRule.all();

当我们将重复规则保存到服务器时,我们实际上存储的是 myRule.toString() 生成的字符串。

关于javascript - rruleJS : Consideration of timezone for weekly case,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32592875/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com