#javascript #parsing #icalendar #rrule
#javascript #синтаксический анализ #icalendar #правило
Вопрос:
Мне нужно интегрировать повторяющиеся события в адаптированную версию full-calendar, в которую добавлен модуль javascript, позволяющий просматривать события в автономном режиме.
Я ищу библиотеку javascript, которая может анализировать повторяющиеся события в соответствии с RFC 5545.
Мне нужно иметь возможность перечислять все повторяющиеся события, которые происходят между двумя датами (дата начала и дата окончания), используя RRULE и EXDATE и интерпретируя ежедневные, еженедельные, ежемесячные и ежегодные повторения.
Я потратил часы на поиск чего-либо, что не приведет к сбою, и я не хочу изобретать велосипед….Кто-нибудь, пожалуйста, может указать мне правильное направление для существующего анализатора javascript?
Ответ №1:
Я проверил в skyporters rrule_parser и обнаружил, что он не поддерживает все правила (в частности, он не будет выполнять BYDAY должным образом). Я нашел фантастическую альтернативу:
https://github.com/jakubroztocil/rrule
Они активно поддерживают эту библиотеку и имеют отличный демонстрационный веб-сайт, на котором показаны все функциональные возможности. Вы можете выполнять синтаксический анализ либо в формате 5545, либо в обычном тексте (используя расширение nlp). Он обладает множеством функций и, насколько я могу судить, полностью функционирует.
Ответ №2:
посмотрите на https://github.com/skyporter/rrule_parser.
Я надеюсь, что это поможет вам.
Ответ №3:
вот виджет повторения для jquery, который анализирует / создает строки повторения, совместимые с RFC5545.
https://github.com/collective/jquery.recurrenceinput.js
однако это не расширяет правило повторения на даты возникновения. но он включает в себя сервер python, который может сделать это за вас, используя python-dateutil:http://labix.org/python-dateutil
Ответ №4:
Мне самому нужна была эта функциональность вместе с поддержкой часовых поясов, поэтому я создал библиотеку typescript / javascript: rSchedule.
В настоящее время поддерживаются все правила повторения ICAL, за исключением BYSETPOS, BYWEEKNO и BYYEARDAY. Поддерживает сериализацию в / из формата ICAL наряду с кучей дополнительных материалов.
Пример:
const rule = new RRule({
frequency: 'YEARLY',
byMonthOfYear: [2, 6],
byDayOfWeek: ['SU', ['MO', 3]],
start: new Date(2010,1,7),
}, {
dateAdapter: StandardDateAdapter
})
let index = 0;
for (const date of rule.occurrences()) {
date.toISOString()
index
if (index > 10) break;
}
rule.occurrences({
start: new Date(2010,5,7),
take: 5
})
.toArray()
.map(date => date.toISOString())