Calendar 重复规则定义(RFC2445)问题
我正在使用Google的RFC2445实现()来实现重复规则。如果我定义从1月30日开始的每月复发,则将完全跳过少于30天(即2月)的月份。因此,谷歌API将返回1月30日、3月30日、4月30日等,这并不好。我希望它会回来:1月30日,2月28日,3月30日,4月30日 类似地,如果我选择1月31日为开始日期,则任何少于31天的月份都将被跳过 根据RFC2445规范,这可能是正确的,也可能是一个错误。你觉得怎么样 我的主要问题是,有没有办法定义一条规则,即“在每个月的30日重现;或者如果30日不存在,则在每月的最后一天重现”。我不相信有。有什么建议吗 提前谢谢 问候,, Cormac嗯,从自身来看,你所看到的行为显然是正确的: 如果发现BYxxx规则部分值超出了可用范围(即2月份的BYMONTHDAY=30),则将忽略这些值Calendar 重复规则定义(RFC2445)问题,calendar,rule,recurrence,rfc2445,Calendar,Rule,Recurrence,Rfc2445,我正在使用Google的RFC2445实现()来实现重复规则。如果我定义从1月30日开始的每月复发,则将完全跳过少于30天(即2月)的月份。因此,谷歌API将返回1月30日、3月30日、4月30日等,这并不好。我希望它会回来:1月30日,2月28日,3月30日,4月30日 类似地,如果我选择1月31日为开始日期,则任何少于31天的月份都将被跳过 根据RFC2445规范,这可能是正确的,也可能是一个错误。你觉得怎么样 我的主要问题是,有没有办法定义一条规则,即“在每个月的30日重现;或者如果30日
我能想到的唯一解决办法是使用多个定期规则,即每个月30日一个,2月最后一天另一个。关于RFC跳过这些日期,你似乎是对的。如果您的
DTSTART
是1月31日,并且您没有在定期规则中指定BYMONTHDAY
(或者如果BYMONTHDAY
是在31日),那么在没有这一天的月份,它只会忽略该规则:
如果找到BYxxx规则部件值
超出了可用范围
(即二月的BYMONTHDAY=30),他们
这些都被忽略了
但是,您应该能够通过monthday为指定-1,并让它使用当月的最后一天,不管它是什么
BYMONTHDAY规则部分指定
逗号字符(ASCII十进制44)
一个月中天数的单独列表。
有效值为1到31或-31到-1。
例如,-10代表第十位
直到这个月的最后一天
答案是:FREQ=每月;BYMONTHDAY=28,29,30;BYSETPOS=-1,翻译为“每月30日重现;如果30日不存在,则在当月最后一天重现”。负数几乎起作用;提问者想要-2个月加31天,-1个月加30天(或29或28天)。更接近……这是真的,我认为这是不可能的,但他自己找到了BYSETPOS,这正是他想要的。你能解释一下为什么BYMONTHDAY=28,29,30转换为每月30日,而不是28、29和30日吗?这是因为BYSETPOS语法。更准确的翻译是“在给定月份存在的集合28、29、30的最后(-1)个位置重复出现”。因此,如果第30个不存在,则集合中的最后一个有效项为29。如果那不存在,那是28。很好的发现,@Cormac Redmond!有谁能给我指点一些关于定期规则的文档吗?我好像找不到。