Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/426.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript rrule用于在31日或最近的一天每月重复_Javascript_Rrule - Fatal编程技术网

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

Javascript rrule用于在31日或最近的一天每月重复,javascript,rrule,Javascript,Rrule,您如何为每月重复发生的每月31日(或30日或29日)的事件指定一个rrule,如果该月没有足够的天数,它将选择最近的日期(即,2月将选择28日或29日,4月将选择30日) 从技术上讲,如果相关的话,我正在使用javascript库 为了添加上下文,我有一个表单,用户可以在其中指定开始日期和重复(每年、每月、每周、每天),就像账单一样。如果汇票通常在30日到期,那么在2月,它将在28日(或29日)到期。有一个新的扩展到RRULE以涵盖该情况。不幸的是,它还没有得到广泛的支持。不确定您正在使用的Ja

您如何为每月重复发生的每月31日(或30日或29日)的事件指定一个rrule,如果该月没有足够的天数,它将选择最近的日期(即,2月将选择28日或29日,4月将选择30日)

从技术上讲,如果相关的话,我正在使用javascript库


为了添加上下文,我有一个表单,用户可以在其中指定开始日期和重复(每年、每月、每周、每天),就像账单一样。如果汇票通常在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