FreeGridv1.15.1English

날짜 편집기(달력)

날짜 컬럼에 열리는 달력 편집기: 날짜를 누르거나 입력하고, 키보드로 하루·한 달·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를 돌려줍니다. 달력에서 줄이 그어지고, 입력하거나 붙여넣어도 거부됩니다.
weekStart0 – 6주의 첫 요일(0 일요일 … 6 토요일). 기본은 영어(미국)·한국어·일본어·중국어는 일요일, 그 밖에는 월요일입니다.
todayboolean달력 아래 오늘 버튼(기본 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 / PageDown1년 앞 / 뒤
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처럼 입력할 수 있고 달력이 입력을 따라갑니다.