2012-04-25 82 views
1

我正在建立一個使用FullCalendar作爲前端的日曆系統。後端將是MySQL/PHP。iCal後端 - 重複日期

它將存儲由應用程序生成和插入的用戶的公共約會列表。這些約會將是一個單一的事件,將在同一天開始和結束。此外,由於個人的承諾,用戶將能夠在日曆中標記他們的可用性。後者的功能需要使用循環事件。而不是重新發明輪子,我一直在尋找使用基於iCal的結構。這篇文章在確定數據庫結構時非常有幫助ical-field-list-for-database-schema-based-on-ical-standard

我已經創建了申請表,允許用戶輸入必要的數據以存儲私人單一/定期預約。提交表單後,數據通過Ajax發送到服務器。我發現了一個很棒的PHP腳本,它可以根據用戶輸入的參數生成一個重複日期數組,無論是以其原生格式還是使用RRULE。

我不確定什麼是存儲/檢索這些重複日期的最佳方式。應用程序需要能夠爲用戶呈現日曆視圖,包括公共和私人日期。應用程序還需要能夠返回例如所有在特定時間/日期期間可以空閒的用戶。

是否足夠存儲iCal格式的所有事件,並且能夠根據需要檢索事件?我預見到的問題是重複事件不容易搜索,因爲它們的參數將不得不在飛行中擴展?我正在考慮創建每個單獨事件的第二張表格(如生成的),並返回到創建它的原始RRULE。我希望限制用戶可能輸入的重複日期的數量,以防止用戶在接下來的100年內每天都進入活動!我認爲這種方法也會讓我編輯最初由循環規則創建的單個事件。

這是一個好方法,還是有更好的方法?

回答

1

看一看when building a calendar app, should i store dates or recurrence rules in my database?

您應該存儲與有效性信息相關聯的rrule,exrule,rdate和更新(以便能夠跟蹤隨時間推移的變化:例如,如果您的用戶在發生特定事件時可能希望回顧過去,並且如果當他/她回頭看時,突發事件在時間點和時間點之間變化), 對於事件發生次數有限的事件,爲時間窗口預先計算開始和結束時間,以便查詢,並有滾動窗口你有一個表中所有事件的發生。當用戶從時間窗口中尋找出現的事件(很少有人會看到一年以上或以後的一年以上),您可以計算用戶請求的時間窗口特定的相關事件,並即時生成它們。

+0

我曾經搜索過這個網站,但沒有找到這個鏈接頁面,其中包含很多有用的信息 - 謝謝。我認爲2表的方法是正確的,一個是rrule,它反過來產生一個事件表。我將不得不考慮永無止境(或長時間運行)的事件,以及是否限制它們,或者定期擴展它(可能在cron作業上)。日曆不僅僅是爲創建它的用戶提供的,而是需要被查詢來查找系統的「空閒時隙」,所以我將需要爲所有涵蓋相關時間範圍的用戶全面擴展rrule(s) S)。 – Dave 2012-05-06 17:35:29

1

如何大意如下表:

CREATE TABLE RecurringAppointments (
    startdate DATE NOT NULL, 
    enddate DATE, 
    freq  INT NOT NULL, -- contains #days between each occurrence 
    -- etc. 
) 

然後,獲取在給定的thedate發生的所有這類約會:

SELECT * FROM RecurringAppointments 
WHERE 
     thedate BETWEEN startdate AND enddate 
    AND DATEDIFF(thedate, startdate) % freq = 0; 
+0

感謝您的回覆,我將着眼於使用您的示例。我對有額外表格的概念更感興趣,以及這是否是正確的方法。有很多iCal的例子,但關於管理事件的最佳方式並不多。 – Dave 2012-04-26 19:34:27

+0

我認爲iCal是系統間日曆數據交換的一種很好的格式,但可能不適合在系統內構建日曆數據?無論您是將上述技術作爲單獨的表執行還是將這些字段添加到更通用的「Appointments」表中,完全取決於您。 – eggyal 2012-04-27 06:58:52

+0

你的回覆很受讚賞,但並沒有真正回答這個問題,即關於在日曆系統中使用iCal格式和RRULES的問題,以及是否需要(或必需)第二張表格,以及我的想法和方法實際上是一個好主意.FYI我決定使用iCal和RRULES格式來生成未來日期列表。這些被存儲在一個單獨的表格中。當用戶希望更新序列中的某些/所有日期時,就會產生複雜性。 – Dave 2012-05-02 16:42:26