To avoid unexpected timezone offsets, it is highly recommended to use UTC timestamps (e.g., new Date(Date.UTC(...))) or the provided datetime() helper.
RRule returns dates with zero offset (as if they were UTC), but they are intended to be interpreted as local times. If you need true UTC conversion, consider using a library like Luxon to convert the returned JS Date objects.
// RECOMMENDED: Use datetime() helper to avoid offset issues
new RRule({
freq: RRule.MONTHLY,
dtstart: datetime(2018, 2, 1, 10, 30),
until: datetime(2018, 3, 31),
}).all()
// WRONG: Using standard Date constructor may add unwanted offsets
new RRule({
freq: RRule.MONTHLY,
dtstart: new Date(2018, 1, 1, 10, 30),
until: new Date(2018, 2, 31),
})