簡體   English   中英

在 PHP/MySQL 中創建周期性日歷事件

[英]Creating recurring calendar events in PHP/MySQL

我正在嘗試創建一個包含重復事件(例如每周或每月)的事件日歷,但我無法理解它。 誰能給我一些指點? 這樣做的最佳方法是什么? 任何幫助是極大的贊賞。 謝謝。

我知道這是一個舊帖子,但我也在想同樣的事情。

我喜歡關於使用多個表來做這件事的人的解決方案,但實際上這一切都可以從一張表上完成。

使用以下數據創建一個表...

event_title
event_text
event_image
and_other_fields_about_event
recur_code (text)
recur_mode (integer)
start_date (date)
end_date (date)
recur_end_date (date)

recur_mode 可以有三種狀態 - 0 = 不重復 1 = 重復並有結束日期 2 = 正在進行但沒有結束日期(例如,如果您想將 1 月 1 日之類的內容添加為元旦)

如果日期重復,recur_code 將在其中存儲 NULL 或代碼。 應該在那里使用的代碼是 PHP DateInterval 代碼(即 1 年的 P1Y 或 P3M(3 個月)或 P7D(7 天)等) - 如果您想稍微縮小數據,您可以砍掉初始'P' 並稍后將其添加回來,因為最初的 'P' 始終是 P,它代表 Period 所以“Period 3 Months”“Period 7 Days”等。

然后當您從數據庫中檢索數據時 - 您使用以下搜索檢索所有數據

( end_date >= CURDATE () ) OR ( ( recur_mode = 1 ) AND ( recur_end_date >= CURDATE () ) ) OR ( recur_mode = 2 )

(請注意,這不是正確的 SQL - 它只是您需要的 or 語句的基本示例)

然后,一旦您檢索到數據,請使用帶有 while 循環和 DateInterval 的 PHP 來增加 start_date,直到您再次出現下一次,同時確保如果 recur_mode 設置為 1,則開始日期不在 recur_end_date 之后。

全部在一張表中完成 - 如果您想要一個輸入表單來放置代碼,那么使用帶有 dateinterval 值的隱藏字段,同時使用各種單選按鈕來選擇間隔 - 然后使用 jQuery onchange 更新隱藏值新的選擇器值。

創建三個具有如下結構的表:

event

-id
-schedule_type
-schedule_id
-title
etc.

schedule

-id
-event_id
-datetime

schedule_recurring

-id
-event_id
-date
-time

在您的event表中,schedule_type 字段將為 0 或 1,這將向應用程序指示調度信息存儲在哪個表中,以及如何解釋該信息。

非重復事件將存儲在schedule ,日期時間:2011-09-06 00:00:00,重復事件將存儲在schedule_recurring ,日期:'every 1st Monday',時間:09:30, 12:20(如果該事件在每個月的第一個星期一發生兩次)。

也許這會幫助你開始!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM