Generare tutte le possibili ripetizioni di un evento (in teoria) riempirebbe il tuo spazio di archiviazione con eventi che molto probabilmente non sarebbero mai stati visti dall'utente (congratulazioni per il tuo 999,999,999,999,999,999,999 ° compleanno!).
ci vuole un po 'più di lavoro, ma la soluzione è quella di memorizzare fondamentalmente una tabella (o tabelle) delle regole di ripetizione che vi uniscono le voci del calendario di come si costruisce un calendario:
"per tutti i giorni della settimana viene mostrato, verificare la presenza di eventi che si ripetono in quei giorni" 'per ogni settimana del mese di essere indicati, verificare la presenza di eventi che si ripetono in quelle settimane' 'per ogni mese in un anno', ecc ...
Quanti di questi controlli devi fare dipende da quanti tipi (e durata) di ripetizioni vorrai.
Come per gli eventi di soppressione, questa è un'altra tabella che elenca i punti alle date/orari che devono essere soppressi. "Se mostrando il lunedì, mostrare tutti gli eventi che si ripetono in mesi, ad eccezione di quelli elencati nella tabella soppressione"
commento followup:
Beh, avresti il vostro tavolo voce del calendario di serie, per memorizzare le informazioni di base . data/ora, ecc ... Quindi almeno altre due tabelle per memorizzare le informazioni di ripetizione. Uno che memorizza le regole di ripetizione. "Ogni lunedi", "primo giorno del mese", "ogni anno", ecc ..., e una terza tabella che collega tra le voci di calendario e le regole
così:
calendar entries table <---> link table <---> repeat rules table
Interrogazione sarebbe una questione di costruzione di cose in modo che per la data che stai considerando, le regole appropriate escano e ti danno gli ID delle voci del calendario da visualizzare. Potrebbe diventare brutto se fai una query elaborata che si collega in modo dinamico alle regole appropriate in base a una data passata.
Questa domanda potrebbe essere utile: http://stackoverflow.com/questions/1274003/adding-recurring-event-to-google-calendar-via-xml – jrummell
Hai implementato questo? Ho anche bisogno dello stesso –