-
Notifications
You must be signed in to change notification settings - Fork 539
rrule.js vs dateutil.rrule #807
Copy link
Copy link
Closed
Description
import arrow
from dateutil.rrule import rrule, rruleset, rrulestr
from dateutil.parser import *
FREQNAMES = ['YEARLY','MONTHLY','WEEKLY','DAILY','HOURLY','MINUTELY','SECONDLY']
WEEKDAYS = ['MO','TU','WE','DH','FR','SA','SU']
def rruleset_from_str(rrule_str):
"""convert string from nodejs rrule module to acceptable string for rrulestr
and return rruleset object """
# print (rrule_str)
rules = rrule_str.split(';')
# print (rules)
clear_rules = []
dtstart = None
for i, rule in enumerate(rules):
if "DTSTART" in rule or "dtstart" in rule:
dtstart = rule
elif "COUNT" in rule:
if rule.split('=')[1]!='0':
clear_rules.append(rule)
else:
clear_rules.append(rule)
correct_rules = ';'.join(clear_rules)
# print (clear_rules)
if dtstart:
fix_date = None
try:
fix_date = arrow.get(dtstart.split('=')[1].rstrip('Z'),'YYYYMMDDTHHmmss')
except:
fix_date = arrow.get(dtstart.split(':')[1].rstrip('Z'),'YYYYMMDDTHHmmss')
correct_rules = 'DTSTART:{}\n'.format(fix_date.format('YYYYMMDDTHHmmssZ')) +"RRULE:"+ correct_rules
# print (correct_rules)
rr_set = rrulestr(correct_rules, forceset=True)
return rr_set
if __name__=='__main__':
rr = rruleset_from_str("FREQ=WEEKLY;DTSTART=20120201T093000Z;INTERVAL=5;UNTIL=20130130T230000Z;BYDAY=MO,FR")
print(rr)
print(rr._rrule[0])
print(rr._rrule[0].__dict__)
MY EVENT:
user in +07:00
event from 6.30 in TU
i save in utc, but day it same
MY RRULE: "FREQ=WEEKLY;BYDAY=TU;INTERVAL=1;DTSTART=20171106T234500Z;UNTIL=20221106T234500Z"
MY BEETWEN: from 2018-08-27 00:00:00.000+07:00 to 2018-08-20 00:00:00.000+07:00
var rrule = new RRule.fromString("FREQ=WEEKLY;BYDAY=TU;INTERVAL=1;DTSTART=20171106T234500Z;UNTIL=20221106T234500Z")
var beetween = rrule.between(moment("2018-08-27 00:00:00.000+07:00").toDate(), moment("2018-08-20 00:00:00.000+07:00").toDate())
console.log(beetween)
on rrule.js i get
[ 2018-08-20T23:45:00.000Z ]
q = "FREQ=WEEKLY;BYDAY=TU;INTERVAL=1;DTSTART=20171106T234500Z;UNTIL=20221106T234500Z"
r = rruleset_from_str(q)
t = r.between(arrow.get("2018-08-20 00:00+07:00").datetime,arrow.get("2018-08-27 00:00+07:00").datetime)
print (t)
on dateutil.rrule i get
[datetime.datetime(2018, 8, 21, 23, 45, tzinfo=tzutc())]
JS IS BAD
But it works for me. How to do the same on dateuti.rrule
How to do the same thing on Python as well as on JS
Reactions are currently unavailable