날짜 편집기(달력)
날짜 컬럼에 열리는 달력 편집기: 날짜를 누르거나 입력하고, 키보드로 하루·한 달·1년씩 움직이며, min·max·disabledDates로 고를 수 있는 날을 정합니다.
실행 예제날짜 편집기
날짜 컬럼의 달력 편집기. 기간 제한과 키보드 이동.
이 데모의 코드
import { createGrid, type ColumnDef, type Row } from '@freegridjs/core';
import { makeRows } from '../data';
import { button, separator, text, tr, type DemoContext } from '../ui';
export default function mount(ctx: DemoContext) {
const h = (en: string, ko: string) => tr(ctx.lang, { en, ko });
const columns: ColumnDef[] = [
{ field: 'name', header: h('Name', '이름'), width: 160 },
// the calendar is the default editor of date columns
{ field: 'joined', header: h('Joined', '가입일'), type: 'date', width: 140, editable: true },
// limits: this year only, no weekends, weeks start on Monday
{ field: 'visit', header: h('Visit (weekdays, this year)', '방문일(평일, 올해)'), type: 'date', width: 200, editable: true,
editor: { type: 'date', min: `${new Date().getFullYear()}-01-01`, max: `${new Date().getFullYear()}-12-31`, disabledDates: d => d.getDay() === 0 || d.getDay() === 6, weekStart: 1 } },
// a text column: stored as 'YYYY-MM-DD'
{ field: 'due', header: h('Due (text)', '마감(텍스트)'), width: 140, editable: true, editor: { type: 'date' } },
];
const data = makeRows(200).map(r => ({ ...r, visit: null, due: '' }));
const grid = createGrid(ctx.host, { columns, data, locale: ctx.lang });
grid.on('cellValueChanged', e => ctx.log(`${e.colId}: ${String(e.oldValue)} → ${String(e.newValue)}`));
text(ctx, h('Double-click a date. ↑ ↓ move a day, PageUp / PageDown a month, Shift a year; the year and month lists jump far.',
'날짜를 더블클릭하세요. ↑ ↓는 하루, PageUp / PageDown은 한 달, Shift는 1년씩 움직이고, 연·월 목록으로 멀리 이동합니다.'));
return grid;
}날짜 컬럼(type: 'date')은 셀 아래에 열리는 달력으로 편집합니다. 날짜를 누르거나 달력 위 입력칸에 직접 입력하면 되고, 입력하는 대로 달력이 따라갑니다. 텍스트 컬럼에서도 editor: { type: 'date' }로 같은 편집기를 쓰며, 이때 값은 'YYYY-MM-DD' 글자로 저장됩니다.
기본 사용
createGrid(el, {
columns: [
{ field: 'orderDate', header: 'Order date', type: 'date', editable: true }, // the calendar by default
{ field: 'due', header: 'Due', editable: true, editor: { type: 'date' } }, // a text column: stored as 'YYYY-MM-DD'
],
data,
});셀을 더블클릭하거나 Enter·F2를 누르거나 숫자를 입력하기 시작하면 편집기가 열립니다. 날짜를 누르면 바로 저장되고 달력이 닫히며, Enter는 입력칸의 값을 저장합니다.
옵션
| 이름 | 타입 | 설명 |
|---|---|---|
min / max | 'YYYY-MM-DD' | Date | 고르거나 입력할 수 있는 가장 이른 날과 늦은 날. 범위 밖 날짜는 흐리게 보이고, 입력하면 안내 문구와 함께 거부됩니다. |
disabledDates | (day: Date) => boolean | 고를 수 없는 날(주말, 휴일 등)이면 true를 돌려줍니다. 달력에서 줄이 그어지고, 입력하거나 붙여넣어도 거부됩니다. |
weekStart | 0 – 6 | 주의 첫 요일(0 일요일 … 6 토요일). 기본은 영어(미국)·한국어·일본어·중국어는 일요일, 그 밖에는 월요일입니다. |
today | boolean | 달력 아래 오늘 버튼(기본 true). 오늘이 min·max 밖이면 누를 수 없습니다. |
{ field: 'visit', type: 'date', editable: true,
editor: {
type: 'date',
min: '2026-01-01',
max: new Date(2026, 11, 31),
disabledDates: d => d.getDay() === 0 || d.getDay() === 6, // no weekends
weekStart: 1, // weeks start on Monday
} }키보드
| 키 | 동작 |
|---|---|
| ↑ / ↓ | 하루 앞 / 뒤 (입력칸과 달력이 함께 움직임) |
| PageUp / PageDown | 한 달 앞 / 뒤 |
| Shift + PageUp / PageDown | 1년 앞 / 뒤 |
| Enter | 입력칸의 날짜를 저장하고 아래로 |
| Tab / Shift + Tab | 저장하고 다음 / 이전 편집 칸으로 |
| Esc | 저장하지 않고 닫기 |
위쪽의 연도·월 목록으로 수십 년 전 생년월일처럼 먼 날짜로 바로 갈 수 있고, ‹ ›는 한 달씩 움직입니다.
저장되는 값
| 원래 값 | 편집 후 값 |
|---|---|
| Date 객체 | Date 객체(현지 시각 자정) |
| 날짜 컬럼의 글자 '2026-03-05' | 같은 모양의 글자 |
| editor: 'date'인 텍스트 컬럼 | 'YYYY-MM-DD' 글자 |
| 지우기(버튼 또는 빈 칸) | null |
화면 표시는 그리드 언어로 컬럼 format(short, long, Intl 옵션)을 따르고, 편집 입력칸은 어느 언어에서나 입력하기 쉽게 항상 YYYY-MM-DD로 보여 줍니다.
붙여넣기·채우기·검사
2026-03-05,2026.3.5,2026/3/5를 붙여넣으면 입력과 같이 처리되고,min·max밖이나disabledDates에 걸리는 날은 건너뛰어 붙여넣기 결과의skipped에 셉니다.- 달력으로 고른 값에도
required·unique·validate가 적용되고, 안내 문구는 셀 아래에 나옵니다. - 날짜와 시각을 함께 쓰려면
format: 'datetime'(날짜·시각 선택기), 시각만이면editor: { type: 'time' }을 쓰세요. - 같은 컬럼을 거르는 방법은 날짜 필터를 보세요. 컬럼 메뉴와 필터 행에서도 달력이 열립니다.
이 페이지에 대한 질문
그리드 셀에 날짜 선택 달력을 넣으려면?
컬럼에 type: 'date'와 editable: true를 주면 됩니다. 날짜 컬럼은 달력이 기본 편집기이고, editor: { type: 'date', min, max }로 제한을 더합니다.
달력 대신 직접 입력할 수도 있나요?
네. 달력 위 입력칸에 2026-03-05, 2026.3.5, 2026/3/5처럼 입력할 수 있고 달력이 입력을 따라갑니다.