rrule在31日或最近的一天重复每月

时间:2016-03-02 20:50:58

标签: javascript rrule

如何为每月复发的第31个月(或30日或29日)指定一个事件的套期,如果月份没有足够的天数则选择最接近的事件(即二月它会选择28日或29日,四月会选择第30名?

从技术上讲,我使用rrule javascript库是否相关。

要添加上下文,我有一个表单,用户可以指定开始日期重复(每年,每月,每周,每日),就像账单一样。如果账单通常在30日到期,那么在2月份到期将是28日(或29日)。

2 个答案:

答案 0 :(得分:6)

RRULE有一个名为RSCALE的新扩展名,以涵盖该案例。不幸的是,它还没有被广泛支持。不确定您正在使用的Javascript rrule库,但如果不是这样,您应该打开一个问题。

使用RSCALE扩展程序,您的RRULE将如此:

FREQ=MONTHLY;RSCALE=GREGORIAN;BYMONTHDAY=31;SKIP=BACKWARD

每个月每31个都会发生RRULE次的事件,除非那天不存在SKIP=BACKWARD说&#34;使用之前的有效日期&#34;。< / p>

修改

我已经意识到在没有RSCALE的情况下表达这种情况的另一种方式:

每个月31日,回退到该月的最后一个有效日:

FREQ=MONTHLY;BYMONTHDAY=28,29,30,31;BYSETPOS=-1

每月30日,2月份回落到28日或29日(闰年)

FREQ=MONTHLY;BYMONTHDAY=28,29,30;BYSETPOS=-1

每月29日,在非闰年中回落至2月28日

FREQ=MONTHLY;BYMONTHDAY=28,29;BYSETPOS=-1

但是,正如人们可以看到RSCALE显然更直观。

答案 1 :(得分:0)

最简单的RRULE获取&#34; 一个月的最后一天&#34;,无论是否落在28,29,30或31是:

FREQ=MONTHLY;BYMONTHDAY=-1

您的查询听起来像是您追求的目标。

我不知道你提到的rrule javascript库是否支持这个。