Повторяющиеся события в календаре: RFC 5545 синтаксический анализ Javascript

#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())