我使用谷歌的RFC2445实现(http://code.google.com/p/google-rfc-2445/)来实现递归规则。如果我定义了一个从1月30日开始的每月重复周期,那么少于30天(即2月)的月份将被完全跳过。所以Google API会返回1月30日,3月30日,4月30日,等等。我预计它会回来:1月30日,2月28日,3月30日,4月30日。
类似地,如果我选择的开始日期是1月31日,那么任何少于31天的月份都将被跳过。
根据RFC2445规范,这可能是正确的,也可能是错误。你认为如何?
我的主要问题是,有没有办法定义这样一条规则:“在每个月的30号重现;如果30号不存在,则在这个月的最后一天重现”。我不相信有。有什么建议吗?
提前谢谢。
问候你,科马克
发布于 2009-02-01 17:06:28
答案是:FREQ=每月;BYMONTHDAY=28,29,30;BYSETPOS=-1,翻译为“在每个月的30号重现;如果30号不存在,则为每月的最后一天”。
发布于 2009-01-30 17:18:10
那么,看看RFC 2445本身,你看到的行为绝对是正确的:
如果发现BYxxx规则部件值超出了可用范围(例如,二月份的BYMONTHDAY=30 ),则它们将被忽略。
我能想到的唯一解决方案是使用多个递归规则,即一个用于每月30日,另一个用于2月的最后一天。
发布于 2009-01-30 17:22:57
看起来你是对的,RFC跳过了那些日期。如果您的DTSTART是1月31日,并且您没有在循环规则中指定BYMONTHDAY (或者如果BYMONTHDAY是在31号),那么它将在没有这样的日期的月份中简单地忽略该规则:
如果发现BYxxx规则部件值超出了可用范围(例如,二月份的BYMONTHDAY=30 ),则它们将被忽略。
但是,你应该能够为BYMONTHDAY指定-1,并让它使用这个月的最后一天,无论它是什么。
BYMONTHDAY规则部分指定一个逗号字符(ASCII十进制44)分隔的月份天列表。有效值为1到31或-31到-1。例如,-10表示该月的第十天到最后一天。
https://stackoverflow.com/questions/496308
复制相似问题