coForward Calendar
월간·주간 일정 선택과 날짜 제어를 위한 캘린더 컴포넌트입니다.
Calendar는 월간/주간 보기, 날짜 선택, 선택 가능 기간 제한 등 다양한 일정 선택 기능을 제공합니다.
입력창과 연동하거나 특정 날짜를 활성화·비활성화하는 등 다양한 화면에서 사용할 수 있습니다.
월간 · 주간 보기
월간과 주간 형태를 모두 지원합니다.
단일 · 다중 선택
단일 선택과 다중 날짜 선택을 지원합니다.
기간 선택
연속 날짜 선택과 기간 표시 기능을 제공합니다.
날짜 제한
최소·최대 날짜, 특정 날짜 및 요일을 제한할 수 있습니다.
다국어 지원
한국어와 영어 표시를 지원합니다.
날짜 콘텐츠 표시
특정 날짜에 일정이나 사용자 콘텐츠를 표시할 수 있습니다.
coForward Calendar 소개
coForward Calendar는 웹 화면에서 월간 또는 주간 달력을 표시하고 날짜를 선택하기 위한 사내 공통 JavaScript 컴포넌트입니다.
이 문서에서 다루는 기능
| 기능 | 설명 |
|---|---|
| 월간·주간 보기 |
month 또는 week 형식으로 달력을
표시합니다.
|
| 한국어·영어 요일 |
ko, en 중 표시 언어를 지정합니다.
|
| 단일 날짜 선택 | 선택한 날짜를 콜백으로 전달받습니다. |
| 다중 날짜 선택 | 여러 날짜를 선택하고 최대 선택 개수를 제한합니다. |
| 날짜 범위 제한 | 최소 날짜와 최대 날짜를 지정합니다. |
| 선택 결과 조회·초기화 | 현재 선택 목록을 조회하거나 전체 선택을 해제합니다. |
| 날짜별 콘텐츠 | 날짜 셀에 일정 개수나 상태 배지를 표시합니다. |
필수 준비물
coForward_Calendar클래스 파일- 캘린더 전용 CSS
- 달력을 표시할 HTML 요소
- ES Module을 지원하는 브라우저 또는 프로젝트 번들러
적용 준비
HTML 작성
달력 컨테이너와 선택 결과를 표시할 입력 요소를 준비합니다.
<link rel="stylesheet" href="/path/to/coForward_calendar.css">
<label for="selectedDate">선택 날짜</label>
<input id="selectedDate" type="text" readonly>
<div id="calendar"></div>
<script type="module" src="/js/calendar-page.js"></script>
📌 참고
CSS와 JavaScript 경로는 프로젝트의 실제 정적 리소스 경로에 맞게
변경합니다.
2-2. 클래스 불러오기
페이지용 JavaScript 파일에서 클래스를 import합니다.
// calendar-page.js
import coForward_Calendar from '/path/to/coForward_calendar.js';
기본 생성 및 렌더링
캘린더는 다음 순서로 생성합니다.
import coForward_Calendar from '/path/to/coForward_calendar.js';
const container = document.getElementById('calendar');
if (!container) {
throw new Error('캘린더 컨테이너를 찾을 수 없습니다.');
}
const calendar = new coForward_Calendar();
calendar.lang = 'ko';
calendar.type = 'month';
calendar.multiSelect = false;
calendar.displayOverflowDate = true;
calendar.render(container);
기본 적용 순서
HTML 컨테이너 준비
↓
클래스 import
↓
인스턴스 생성
↓
옵션과 콜백 설정
↓
render(container) 호출
⚠️ 중요
인스턴스를 생성한 것만으로는 달력이 표시되지 않습니다. 최초 설정이
끝난 뒤 render(container)를 호출합니다.
화면 설정
월간·주간 보기
type으로 달력 표시 방식을 지정합니다.
| 값 | 설명 |
|---|---|
month |
한 달 단위로 표시합니다. 기본값입니다. |
week |
한 주 단위로 표시합니다. |
calendar.type = 'month';
실행 중 표시 방식을 변경한 경우 다시 렌더링합니다.
calendar.setType('week');
calendar.render();
요일 언어
lang으로 요일 표시 언어를 지정합니다.
| 값 | 표시 예시 |
|---|---|
ko |
일, 월, 화, 수, 목, 금, 토 |
en |
Sun, Mon, Tue, Wed, Thu, Fri, Sat |
calendar.lang = 'ko';
실행 중 언어를 변경한 경우 다시 렌더링합니다.
calendar.setLang('en');
calendar.render();
4-3. 이전·다음 달 날짜 표시
월간 보기에서 이전 달과 다음 달 날짜의 표시 여부를 지정합니다.
calendar.displayOverflowDate = true; // 표시
calendar.displayOverflowDate = false; // 숨김
속성을 변경한 뒤에는 render()를 다시 호출합니다.
특정 날짜가 있는 화면으로 이동
calendar.setDate('2026-07-15T00:00:00');
setDate()는 지정한 날짜가 포함된 화면으로 이동하고
달력을 다시 렌더링합니다.
날짜 선택
단일 날짜 선택
기본값은 단일 선택입니다.
calendar.multiSelect = false;
onDateSelect에는 선택한 날짜가
YYYY-MM-DD 문자열로 전달됩니다.
const selectedDateInput = document.getElementById('selectedDate');
calendar.onDateSelect = (date) => {
selectedDateInput.value = date;
};
다중 날짜 선택
여러 날짜를 선택하려면 multiSelect를 활성화합니다.
calendar.multiSelect = true;
calendar.multiLimit = 3;
| 설정 | 설명 |
|---|---|
multiSelect = true |
다중 선택을 사용합니다. |
multiLimit = false |
선택 개수를 제한하지 않습니다. |
multiLimit = 3 |
최대 3개까지 선택합니다. |
다중 선택 결과는 필요한 시점에 getSelectedDate()로
조회합니다.
<button id="confirmDates" type="button">선택 확인</button>
<button id="clearDates" type="button">선택 초기화</button>
const confirmButton = document.getElementById('confirmDates');
const clearButton = document.getElementById('clearDates');
confirmButton.addEventListener('click', () => {
const selectedDates = [...calendar.getSelectedDate()];
console.log('선택 날짜:', selectedDates);
});
clearButton.addEventListener('click', () => {
calendar.removeSelect();
});
💡 권장
getSelectedDate()가 반환한 배열은 복사해서 사용하고,
내부 선택 배열을 직접 수정하지 않습니다.
5-3. 선택 결과 초기화
calendar.removeSelect();
removeSelect()는 선택 데이터와 화면의 선택 표시를 함께
초기화합니다.
선택 범위 제한
minDate와 maxDate로 선택 가능한 전체
기간을 제한합니다.
날짜 경계가 브라우저 시간대의 영향을 받지 않도록 로컬 날짜 객체를 만들어 사용하는 방식을 권장합니다.
function toLocalDate(dateText) {
const [year, month, day] = dateText.split('-').map(Number);
return new Date(year, month - 1, day);
}
calendar.minDate = toLocalDate('2026-07-01');
calendar.maxDate = toLocalDate('2026-07-31');
| 속성 | 설명 |
|---|---|
minDate |
이 날짜보다 이전 날짜를 선택할 수 없게 합니다. |
maxDate |
이 날짜보다 이후 날짜를 선택할 수 없게 합니다. |
실행 중 날짜 범위를 변경한 경우 다시 렌더링합니다.
calendar.setMinDate(toLocalDate('2026-08-01'));
calendar.setMaxDate(toLocalDate('2026-08-31'));
calendar.render();
날짜별 콘텐츠 표시
날짜 셀에 일정 개수나 상태를 표시하려면 content와
contentMaker를 함께 사용합니다.
날짜별 데이터 등록
calendar.content = [
{ date: '2026-07-03', content: 2 },
{ date: '2026-07-08', content: 5 }
];
date는 반드시 두 자리 월·일을 포함한
YYYY-MM-DD 형식으로 작성합니다.
화면 요소 생성
contentMaker는 등록한 content 값을 인자로
받고, 화면에 추가할 DOM 노드를 반환해야 합니다.
calendar.contentMaker = (value) => {
const badge = document.createElement('span');
badge.className = 'calendar-badge';
badge.textContent = `${value}건`;
return badge;
};
.calendar-badge {
display: inline-block;
margin-left: 0.25rem;
font-size: 0.75rem;
}
⚠️ 중요
contentMaker에서 HTML 문자열을 반환하지 않습니다.
document.createElement()로 만든 DOM 노드를
반환합니다.
통합 예제
아래 예제는 한국어 월간 달력, 단일 날짜 선택, 날짜 범위 제한, 입력 요소 연동을 한 번에 적용합니다.
HTML
<link rel="stylesheet" href="/path/to/coForward_calendar.css">
<label for="reservationDate">예약일</label>
<input id="reservationDate" type="text" readonly>
<div id="calendar"></div>
<script type="module" src="/js/reservation-calendar.js"></script>
JavaScript
import coForward_Calendar from '/path/to/coForward_calendar.js';
function toLocalDate(dateText) {
const [year, month, day] = dateText.split('-').map(Number);
return new Date(year, month - 1, day);
}
const container = document.getElementById('calendar');
const reservationInput = document.getElementById('reservationDate');
if (!container || !reservationInput) {
throw new Error('캘린더 적용에 필요한 HTML 요소가 없습니다.');
}
const calendar = new coForward_Calendar();
calendar.lang = 'ko';
calendar.type = 'month';
calendar.multiSelect = false;
calendar.displayOverflowDate = true;
calendar.minDate = toLocalDate('2026-07-01');
calendar.maxDate = toLocalDate('2026-12-31');
calendar.onDateSelect = (date) => {
reservationInput.value = date;
};
calendar.render(container);
통합 예제 실행 화면
보기 방식, 언어, 선택 방식을 변경하고 날짜 선택 결과를 직접 확인할 수 있습니다.
선택 가능 범위
2026-07-01 ~ 2026-12-31
날짜별 콘텐츠
일부 날짜에는 일정
배지가 표시됩니다.
문제 해결
달력이 표시되지 않습니다.
다음 항목을 확인합니다.
-
클래스 파일이 올바른 경로에서
import되었는지 확인합니다. - 캘린더 컨테이너가 실제로 존재하는지 확인합니다.
render(container)를 호출했는지 확인합니다.- 캘린더 CSS가 로드되었는지 확인합니다.
- 브라우저 개발자 도구의 Console 오류를 확인합니다.
const container = document.getElementById('calendar');
console.log(container);
설정을 변경했지만 화면이 그대로입니다.
일반 속성은 변경 후 다시 렌더링합니다.
calendar.lang = 'en';
calendar.type = 'week';
calendar.render();
날짜 선택 후 입력값이 바뀌지 않습니다.
onDateSelect가 함수로 등록되어 있는지, 입력 요소가
존재하는지 확인합니다.
calendar.onDateSelect = (date) => {
document.getElementById('selectedDate').value = date;
};
날짜 콘텐츠가 표시되지 않습니다.
다음 두 항목을 확인합니다.
-
content[].date가YYYY-MM-DD형식인지 확인합니다. -
contentMaker가 문자열이 아니라 DOM 노드를 반환하는지 확인합니다.
API 요약
주요 속성
| 속성 | 기본값 | 설명 |
|---|---|---|
lang |
en |
요일 표시 언어입니다. ko 또는 en을
사용합니다.
|
type |
month |
표시 유형입니다. month 또는 week를
사용합니다.
|
multiSelect |
false |
다중 선택 사용 여부입니다. |
multiLimit |
false |
다중 선택 최대 개수입니다. |
displayOverflowDate |
true |
이전·다음 달 날짜 표시 여부입니다. |
minDate |
null |
최소 선택 가능 날짜입니다. |
maxDate |
null |
최대 선택 가능 날짜입니다. |
onDateSelect |
null |
날짜 선택 시 실행되는 콜백입니다. |
content |
직접 설정 | 날짜별 콘텐츠 데이터 배열입니다. |
contentMaker |
null |
날짜 셀에 추가할 DOM 노드를 만드는 함수입니다. |
주요 메서드
| 메서드 | 설명 |
|---|---|
render(container?) |
달력을 그리거나 다시 그립니다. 최초 호출 시 컨테이너를 전달합니다. |
setLang(lang) |
표시 언어를 변경합니다. 변경 후 render()가
필요합니다.
|
setType(type) |
월간·주간 유형을 변경합니다. 변경 후 render()가
필요합니다.
|
setDate(dateString) |
지정한 날짜가 포함된 화면으로 이동하고 다시 렌더링합니다. |
setMinDate(date) |
최소 선택 가능 날짜를 설정합니다. |
setMaxDate(date) |
최대 선택 가능 날짜를 설정합니다. |
getSelectedDate() |
현재 선택된 날짜 배열을 반환합니다. |
removeSelect() |
선택 데이터와 화면 표시를 함께 초기화합니다. |
© team coForward