'How to exclude date in RRule.js?
Suspected code:
<script src="https://jakubroztocil.github.io/rrule/dist/es5/rrule.min.js"></script>
// Create a rule:
const rule = new rrule.RRule({
freq: rrule.RRule.DAILY,
dtstart: new Date('{{ date('Y-m-d', strtotime($product->details->date_from . ' -1 day'))}}'),
until: new Date('{{$product->details->date_to_1 ? date('Y-m-d', strtotime($product->details->date_to_1 . ' +1 day')) : date('Y-m-d', strtotime($product->details->date_to . ' +1 day'))}}'),
});
rule.exdate(new Date("2020-06-25"));
Console got that:
TypeError: rule.exdate is not a function
But if we follow the official guide RRule repo manual
We can observe the solution as :)
// Add a exclusion date to rruleSet rruleSet.exdate(new Date(Date.UTC(2012, 5, 1, 10, 30)))
I'm unable to figured it out where am i wrong ?
Thanks in advance.
Regards,
Aizaz
Solution 1:[1]
const rruleSet = new RRuleSet();
rruleSet.rrule(
new RRule({
freq: RRule.DAILY,
count: 5,
dtstart: new Date("Aug 2020 10 10:30 am"),
})
);
rruleSet.exdate(new Date("Aug 2020 12 10:30 am"));
Here, it will exclude 12th Aug and gives back (10,11,13,14 of Aug).
Solution 2:[2]
RRuleSet is a different object to RRule. You will find exdate on the RRuleSet object and not on the RRule.
- Create a RRuleSet
- Add add your RRule
- Add your exclusion on the RRuleSet
Solution 3:[3]
The EXDATE
prop will only work in RRuleSet
. So, after including rrule.js
script, you can exclude a single date or multiple dates like this:
const RRuleSet = rrule.RRuleSet;
const rruleSet = new RRuleSet();
rruleSet.rrule(
new RRule({
freq: RRule.DAILY,
count: 5,
dtstart: new Date("2022-04-15"),
})
);
rruleSet.exdate(new Date("2022-04-25"));
// Again add 'exdate()' to exclude another date
rruleSet.exdate(new Date("2022-04-28"));
After that, convert rruleSet
into string using toString()
let rruleStr = rruleSet.toString();
So, to check recurrence you should first convert rruleStr
string to object using rrulestr()
and than iterate rule using all()
, before()
, after()
or between()
retrival methods:
let ruleSetObj = rrule.rrulestr(rruleStr);
let ruleNextOccurrence = ruleSetObj.after(new Date('2022-04-25'), true);
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
Solution | Source |
---|---|
Solution 1 | David Buck |
Solution 2 | Piotr Stulinski |
Solution 3 | Tayyab Chaudhary |