Создание повторяющихся событий календаря в PHP / MySQL - PullRequest
3 голосов
/ 06 сентября 2011

Я пытаюсь создать календарь событий с повторяющимися событиями (например, еженедельно или ежемесячно), но я не могу обернуть его вокруг.Кто-нибудь может дать мне несколько советов?Каков наилучший способ сделать это?Любая помощь очень ценится.Спасибо.

Ответы [ 2 ]

2 голосов
/ 06 сентября 2011

Создайте три таблицы со структурой, подобной:

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 с датой: «каждый 1-й понедельник» время: 09: 30, 12: 20 (если событие происходит дважды каждый первый понедельник месяца).

Может быть, это поможет вам начать!

1 голос
/ 25 сентября 2017

Я знаю, что это старый пост, но я тоже думал об этом.

Мне нравится, что люди могут использовать для этого несколько таблиц, но на самом деле все это можно сделать из одной таблицы.

Создать таблицу со следующими данными ...

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 января в качестве новогоднего дня)

recur_code будет хранить либо NULL, либо код в нем, если дата повторится. Код, который следует использовать, это код PHP DateInterval (т. Е. P1Y на 1 год или P3M (3 месяца) или P7D (7 дней) и т. Д.) - если вы хотите немного уменьшить данные, вы можете отрубить исходные данные. «P» и добавьте его позже, поскольку начальное «P» всегда будет «P», оно означает «Период», поэтому «Период 3 месяца», «Период 7 дней» и т. Д.

Затем, когда вы извлекаете данные из базы данных - вы извлекаете все данные с помощью следующих поисков

(end_date> = CURDATE ()) ИЛИ ((recur_mode = 1) И (recur_end_date> = CURDATE ())) ИЛИ (recur_mode = 2)

(обратите внимание, что это не правильный SQL - это просто базовый пример оператора or, который вам понадобится)

затем, как только вы получите данные, используйте PHP с циклом while и DateInterval для увеличения start_date, пока вы не перейдете к следующему повторному вхождению, а также убедитесь, что если для recur_mode установлено значение 1, дата начала не наступает после recur_end_date .

Все сделано в одной таблице - а также, если вы хотите, чтобы форма ввода содержала код, используйте скрытое поле со значением dateinterval, используя различные переключатели для выбора интервала, - затем используйте jQuery onchange для обновления скрытого значение с новыми значениями селектора.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...