Создание всех возможных повторений события (теоретически) заполнит ваше хранилище событиями, которые, скорее всего, никогда не будут видны пользователю (поздравляем с 999 999 999 999 999 999 999-й день рождения!).
Это займет немного больше работы, но решение в основном хранить таблицу (или таблицы) правил повторения, которые вы связать ваши записи календаря как вы строите календарь:
«на каждый день в течение недели показываются события, которые повторяются в те дни « » на каждую неделю месяца, проверьте события, которые повторяются в те недели » « за каждый месяц в году »и т. д.
Сколько из этих проверок вам нужно сделать, зависит от того, сколько типов (и продолжительности) повторений вы хотите.
Что касается подавления событий, это еще одна таблица, в которой перечислены точки в датах/времени, которые необходимо устранить. «Если показ понедельники, показать все события, которые повторяются по месяцам, за исключением перечисленных в таблице подавителя»
комментарий Followup:
Ну, вы бы стандартную таблицу записей календаря, чтобы сохранить основную информацию , дата/время и т. д. Затем, по крайней мере, две другие таблицы для хранения повторяющейся информации. Один, который хранит ваши правила повторения. «Каждый понедельник», «первый день месяца», «каждый год», и т.д ..., и третья таблица, которая связывает между записями календаря и правилами
так:
calendar entries table <---> link table <---> repeat rules table
запрашивая было бы вопросом создания вещей, чтобы на дату, которую вы рассматриваете, выходят соответствующие правила и приводятся идентификаторы записей календаря для отображения. Может оказаться уродливым, если вы делаете причудливый запрос, который динамически связывается с соответствующими правилами на основе даты, в которой вы прошли.
Этот вопрос может быть полезным: http://stackoverflow.com/questions/1274003/adding-recurring-event-to-google-calendar-via-xml – jrummell
Вы реализовали это? Мне также нужно то же самое –