用途
Syncfusion EJ2 DatePicker 是一个用于选择日期的 JavaScript 组件,适用于 TypeScript 应用。它通过日历弹窗或内联常显日历让用户选择日期,适合需要日期输入、日期范围限制、日期格式化或特殊日期标记的场景。
主要能力
- 日历视图:支持月 → 年 → 十年 → 世纪的多级下钻与上钻导航。
- 日期范围约束:通过 min/max 限制可选日期,并对禁用日期应用样式。
- 严格模式:校验输入并阻止无效日期(enableStrictMode)。
- 日期格式化:支持文化相关格式与自定义格式模式(如 d、dd、M、MM、yyyy 等),可自定义标题格式、星期表头格式与悬停提示格式。
- 特殊日期高亮:用自定义样式标记生日、事件、节假日等日期,支持图标 CSS 类与自定义提示。
- 内联显示:日历可常显而非弹窗(displayInline)。
- 键盘导航:支持 Alt+方向键、Ctrl 组合键等快捷键。
- 状态持久化:可将选择保存到 localStorage 并在加载时恢复。
- 无障碍:符合 WCAG 2.2,支持屏幕阅读器与 ARIA 属性。
- 主题:提供 Material、Fabric、Bootstrap 主题并支持自定义。
使用方式
通过 npm 包 @syncfusion/ej2-calendars 引入组件与样式,从输入元素创建 DatePicker 实例并挂载到指定容器。
import { DatePicker } from '@syncfusion/ej2-calendars';
import '@syncfusion/ej2-base/styles/material.css';
import '@syncfusion/ej2-calendars/styles/material.css';
const datePicker = new DatePicker({
value: new Date(),
placeholder: 'Select a date',
min: new Date(2024, 0, 1),
max: new Date(2026, 11, 31),
format: 'MMM dd, yyyy'
});
datePicker.appendTo('#datepicker');
datePicker.change = (args) => {
console.log('Selected date:', args.value);
};
HTML:
<input id="datepicker" />
常见模式
- 日期范围选择(最小/最大):设置 min、max 与 enableStrictMode,用于预订日期、会员周期、财年等只能选择特定范围内日期的场景。
- 内联日历(常显):设置 displayInline 与 showFooter,用于仪表盘、排程器、预约界面等日历需始终可见的场景。
- 面向国际用户的格式:设置 locale 与 dateFormat(如 de-DE、dd.MM.yyyy),用于多语言、国际化应用。
- 高亮重要日期:通过 specialDates 数组与 fields 字段映射(date、iconCSS、tooltip)标记事件、节假日等。
- 年/十年导航:设置 startLevel 与 depthLevel 为 year,用于主要选择月份/年份而不选具体日期的场景(如账单周期、报表月份)。
关键配置属性
- value(Date,默认 null):选中日期
- min / max(Date/String,默认 null):最小/最大可选日期
- format(String,默认 'M/d/yyyy'):显示格式模式
- dateFormat(String,基于 locale):format 的别名
- locale(String,默认 'en-US'):格式化使用的文化/语言
- displayInline(Boolean,默认 false):常显日历
- enableStrictMode(Boolean,默认 true):拒绝无效日期
- startLevel(String,默认 'month'):初始日历视图
- depthLevel(String,默认 'month'):何时返回值
- showFooter(Boolean,默认 true):显示“Today”按钮
- showPopupButton(Boolean,默认 true):显示日历切换按钮
- showOtherMonths(Boolean,默认 true):显示相邻月份日期
- specialDates(Array,默认 []):高亮日期数组
- fields(Object,默认 {}):特殊日期字段映射
- change / created(Function,默认 null):日期变化/初始化时触发
适用场景
需要日期选择输入、日期范围限制、文化相关日期格式、特殊日期标记、内联日历、键盘无障碍操作或跨会话保存日期选择的 Web 应用。
限制与注意事项
- 日期格式错误通常源于未设置或 locale 不匹配,应显式设置 locale 与 dateFormat。
- min/max 不生效可能因时区不一致,应使用一致的 Date 对象或 ISO 字符串。
- 特殊日期不显示通常因字段映射不正确,需核对 fields 与数据结构。
- 键盘快捷键不工作可能因 allowKeyboardNavigation 为 false。
- 内联日历过大可能因父容器受限,需为父容器设置明确宽高。
- 状态未持久化可能因 localStorage 被禁用,需检查浏览器设置与隐私模式。
- 建议显式设置日期格式、使用严格模式校验、正确处理 change 事件、考虑响应式宽度(如 100%)并提供清晰的占位提示文本。
相关组件
TimePicker(时间选择)、DateRangePicker(起止日期选择)、DateTimePicker(日期时间组合选择)、Calendar(无日期输入的月视图)。