Javascript rrule用于在31日或最近的一天每月重复
您如何为每月重复发生的每月31日(或30日或29日)的事件指定一个rrule,如果该月没有足够的天数,它将选择最近的日期(即,2月将选择28日或29日,4月将选择30日) 从技术上讲,如果相关的话,我正在使用javascript库Javascript rrule用于在31日或最近的一天每月重复,javascript,rrule,Javascript,Rrule,您如何为每月重复发生的每月31日(或30日或29日)的事件指定一个rrule,如果该月没有足够的天数,它将选择最近的日期(即,2月将选择28日或29日,4月将选择30日) 从技术上讲,如果相关的话,我正在使用javascript库 为了添加上下文,我有一个表单,用户可以在其中指定开始日期和重复(每年、每月、每周、每天),就像账单一样。如果汇票通常在30日到期,那么在2月,它将在28日(或29日)到期。有一个新的扩展到RRULE以涵盖该情况。不幸的是,它还没有得到广泛的支持。不确定您正在使用的Ja
为了添加上下文,我有一个表单,用户可以在其中指定开始日期和重复(每年、每月、每周、每天),就像账单一样。如果汇票通常在30日到期,那么在2月,它将在28日(或29日)到期。有一个新的扩展到
RRULE
以涵盖该情况。不幸的是,它还没有得到广泛的支持。不确定您正在使用的Javascript rrule库,但如果不是这样,您应该打开一个问题
使用RSCALE
扩展,您的RRULE
如下所示:
FREQ=MONTHLY;RSCALE=GREGORIAN;BYMONTHDAY=31;SKIP=BACKWARD
具有此RRULE
的事件在每个月31日重复发生,除非该日期不存在,在这种情况下SKIP=BACKWARD
表示“使用前一个有效日期”
编辑
我刚刚知道了另一种不用RSCALE表达这一点的方法:
每月31日,回退至当月最后一个有效日期:
每月30日,2月的第28或29日(闰年)后降
在非闰年中,每月第29位,在2月份回落到第28位
然而,正如人们所看到的,这显然更直观,因为
RSCALE
最简单的RRULE
可以获得“月的最后一天”,无论它是在28日、29日、30日还是31日都是:
FREQ=MONTHLY;BYMONTHDAY=-1
你的问题听起来好像就是你想要的
但是,我不知道您提到的rrule javascript库是否支持此功能。从下个月的第一天开始,返回一天…?不幸的是,rrule不支持RSCALE或SKIP,但这确实是解决方案。谢谢这是不对的。另外一个
BYMONTHDAY=28,29,30,31
needed@JuliusŠ. 不确定您所说的“附加”是什么意思,因为第4.3.10节“重复规则”明确规定,诸如BYMONTHDAY之类的关键字“是可选的,但不得出现多次”。相反,如果您的意思是BYMONTHDAY=-1,28,29,30,31
,那么结果将是从月底算起的28天。rrule javascript库似乎有一个可以测试解决方案的方法<代码>频率=每月;BYMONTHDAY=-1在RRULE字符串下作为输入输入时生成预期结果。
FREQ=MONTHLY;BYMONTHDAY=28,29,30;BYSETPOS=-1
FREQ=MONTHLY;BYMONTHDAY=28,29;BYSETPOS=-1
FREQ=MONTHLY;BYMONTHDAY=-1