如何为每月复发的第31个月(或30日或29日)指定一个事件的套期,如果月份没有足够的天数则选择最接近的事件(即二月它会选择28日或29日,四月会选择第30名?
从技术上讲,我使用rrule javascript库是否相关。
要添加上下文,我有一个表单,用户可以指定开始日期重复(每年,每月,每周,每日),就像账单一样。如果账单通常在30日到期,那么在2月份到期将是28日(或29日)。
答案 0 :(得分:6)
RRULE
有一个名为RSCALE
的新扩展名,以涵盖该案例。不幸的是,它还没有被广泛支持。不确定您正在使用的Javascript rrule库,但如果不是这样,您应该打开一个问题。
使用RSCALE
扩展程序,您的RRULE
将如此:
FREQ=MONTHLY;RSCALE=GREGORIAN;BYMONTHDAY=31;SKIP=BACKWARD
每个月每31个都会发生RRULE
次的事件,除非那天不存在SKIP=BACKWARD
说&#34;使用之前的有效日期&#34;。< / p>
修改强>
我已经意识到在没有RSCALE
的情况下表达这种情况的另一种方式:
FREQ=MONTHLY;BYMONTHDAY=28,29,30,31;BYSETPOS=-1
FREQ=MONTHLY;BYMONTHDAY=28,29,30;BYSETPOS=-1
FREQ=MONTHLY;BYMONTHDAY=28,29;BYSETPOS=-1
但是,正如人们可以看到RSCALE
显然更直观。
答案 1 :(得分:0)
最简单的RRULE
获取&#34; 一个月的最后一天&#34;,无论是否落在28,29,30或31是:
FREQ=MONTHLY;BYMONTHDAY=-1
您的查询听起来像是您追求的目标。
我不知道你提到的rrule javascript库是否支持这个。