반복 이벤트( v7.1까지 )
The article refers to the legacy format of recurring events for DHTMLX Scheduler. If you use DHTMLX Scheduler v7.1+ see the details on the current version here.
이 문서는 DHTMLX Scheduler의 반복 이벤트 레거시 형식에 관한 내용입니다. DHTMLX Scheduler v7.1+를 사용하는 경우 현재 버전에 대한 세부 정보는 여기를 참조하세요.
기본적으로 스케줄러는 반복 이벤트를 지원하지 않습니다. 이러한 지원을 활성화하려면 페이지에서 특수 확장을 활성 화해야 합니다 - recurring_legacy.
scheduler.plugins({
recurring_legacy: true
});
반복 이벤트 지원이 활성화되면, 라이트박스가 아래와 같이 보이기 시작합니다:

구성 옵션
라이브러리는 반복 이벤트를 구성하기 위한 다음 옵션들을 제공합니다:
- repeat_date - 'recurring' 라이트박스의 'End by' 필드의 날짜 형식을 설정합니다
- include_end_by - 'End by' 필드에 지정된 날짜가 배타적이거나 포괄적으로 처리될지 정의합니다
- recurring_overflow_instances - 다음 달로 넘어가는 반복의 동작을 정의합니다
- repeat_precise - 'weekly' 반복인 이벤트에 과거 날짜를 포함하지 않도록 방지합니다
- occurrence_timestamp_in_utc - 시간대와 무관하게 반복 이벤트를 다룰 수 있도록 허용합니다
scheduler.config.repeat_date = "%m/%d/%Y";
scheduler.config.include_end_by = true;
...
scheduler.init('scheduler_here', new Date(2027, 7, 5), "month");
'Recurring' 라이트박스
기본적으로 반복 확장이 활성화되면, 라이트박스에 한 섹션이 더 생깁니다 - "Repeat event". 그리고 'recurring' 라이트박스의 기본 정의는 아래와 같이 시작합니다:
[
{name:"description", height:130, map_to:"text", type:"textarea" , focus:true},
{name:"recurring", height:115, type:"recurring", map_to:"rec_type",
button:"recurring"},
{name:"time", height:72, type:"time", map_to:"auto"}
];
추가로 섹션을 더 추가할 수 있지만, 반드시 "recurring"과 "time" 섹션 두 가지를 유지해야 합니다. 또한, "time" 섹션은 반드시 "recurring" 섹션 뒤에 위치해야 합니다.
서버 측 통합(Server-side Integration)
반복 이벤트는 일반 이벤트의 모든 필드에 추가로 3개의 필드를 포함하는 단일 레코드로 데이터베이스에 저장됩니다:
- rec_type - (varchar) 반복 로직을 정의합니다. 이 필드는 자동으로 채워집니다
- event_length - (long int) 이벤트의 실제 길이(초 단위)
- event_pid - (int) 시퀀스의 부모 ID
따라서 백엔드는 일반 이벤트 필드와 함께 반복 필드를 반환해야 합니다. 예:
{
"id": 1,
"start_date": "2027-01-03 10:00:00",
"end_date": "2027-01-13 00:00:00",
"text": "some_text",
"rec_type": "day_1___",
"event_length": 7200,
"event_pid": 0
}
일반적으로 필수 필드 외에 데이터베이스에서 추가 데이터를 추가로 추출할 수 있습니다.
다만, start_date 및 end_date 필드의 의미는 약간 달라집니다:
- start_date - 시리즈의 첫 이벤트 시작 날짜를 'yyyy-mm-dd hh:mm:ss' 형식으로 나타냅니다( settings_format.md).
- end_date - 시리즈의 마지막 이벤트 종료 날짜를 'yyyy-mm-dd 00:00:00' 형식으로 나타냅니다( settings_format.md).
예를 들어 2027년 1월 3일 10:00에 시작하고 매일 반복되며 2027년 1월 13일 12:00에 종료되는 반복 이벤트는 데이터베이스에 아래와 같이 표시됩니다:
id:1,
start_date:"2027-01-03 10:00:00",
end_date:"2027-01-13 00:00:00",
text:"some_text",
details:"",
rec_type:"day_1___",
event_length:"7200",
event_pid:"0" //0은 상위 이벤트를 위한 값이거나 하위 이벤트의 상위 이벤트 ID
클라이언트 측은 rec_type 필드 로부터 아래 형식의 문자열 데이터를 얻습니다:
[type]_[count]_[day]_[count2]_[days]#[extra]
다음과 같은 구성으로 해석됩니다:
- type - 반복의 유형: 'day','week','month','year'.
- count - 유형 단위에서의 이벤트 간 간격.
- day 및 count2 - 달의 특정 일을 정의합니다( 예: 첫 번째 월요일, 다섯째 금요일 등 ).
- days - 영향을 받는 요일의 쉼표로 구분된 목록.
- extra - 반복 세부 정보의 표시를 바꾸는 데 사용할 수 있는 추가 정보.
rec_type 데이터의 예:
- "day_3___" - 매 3일마다
- "month 2__" - 매 2개월마다
- "month_1_1_2_" - 매달의 두 번째 월요일
- "week_2___1,5" - 매주 두 번째 주의 월요일과 금요일
더블 언더라인이나 트리플 언더라인은 문자열의 관련 매개변수가 생략되었음을 나타냅니다.
백엔드에서 시퀀스 파싱(Parsing series on the backend)
반복 이벤트는 데이터베이스에 단일 레코드로 저장되며, Scheduler가 클라이언트 측에서 이를 분할할 수 있습니다. 서버 측에서 개별 이벤트의 날짜를 얻어야 하는 경우 ASP.NET/ASP.NET Core/PHP용 반복 이벤트 파싱 도우미 라이브러리를 사용하십시오.
다음의 준비된 라이브러리를 GitHub에서 찾을 수 있습니다:
시퀀스의 특정 발생(Edit/Delete a certain occurrence in the series)
시리즈의 특정 발생을 삭제하거나 편집하는 기능이 있습니다.
중요한 팁
- 반복 이벤트를 업데이트할 때마다 데이터베이스에 별도 레코드가 생성됩니다.
- 특정 발생은 event_pid 속성을 통해 상위 이벤트를 가리킵니다.
- 시리즈를 편집한 경우, 이 업데이트에 대해 해당 발생이 원래 있었어야 할 시점을 나타내는 타임스탬프가 저장되며, 실제 이벤트 길이가 아닌 값이 저장됩니다. 예를 들어 발생이 2027년 7월 27일 15:00에 발생했고 2027년 7월 30일 15:00으로 이동했다면, 타임스탬프는 처음 날짜를 반영합니다. 타임스탬프는 UNIX epoch으로부터의 초 단위로 측정됩니다.
- 시리즈의 편집 발생이 DB에 저장된 경우 라이트박스를 통해 "Edit series"를 저장하면 저장된 모든 레코드가 삭제됩니다. 남는 레코드는 주된 반복 이벤트뿐이며, 그 발생들의 차이는 사라져 동일해집니다.
예시를 살펴보자
당신은 올림픽 경기의 팬이고 2027년 런던 올림픽(27일 7월 - 12일 8월)을 최대한 많이 보고 싶다고 가정합니다. 그래서 17:00에 시작(퇴근 시간)하고 23:00에 끝나는 반복 이벤트를 만들고 싶습니다. 하지만 개막식은 오직 19:00에 시작하므로 해당 날짜의 첫 이벤트의 시간을 19:00-23:00로 변경하고 싶습니다. 또한 2027년 8월 1일에 마감일이 있어 집에 너무 늦게 도착할 가능성이 있습니다. 따라서 시리즈에서 2027년 8월 1일을 삭제해야 합니다.