前端UI组件【免费下载链接】rsuite A suite of React components .项目地址https://gitcode.com/gh_mirrors/rs/rsuite点击查看免费下载导读在 rsuite 的DateRangePicker组件中format属性决定了日期范围在输入框、日历头部与时间面板中的呈现方式。本文以官方示例文档docs/pages/components/date-range-picker/fragments/format.md为核心骨架结合组件源码src/DateRangePicker/DateRangePicker.tsx与日期模式判定逻辑src/internals/utils/date/useDateMode.ts系统讲解 format 令牌语法、分隔符character、12/24 小时制showMeridiem、日历图标caretAs的搭配用法以及 format 如何驱动组件自动切换「纯日期 / 纯月份 / 纯时间 / 日期时间」四种渲染模式。读完本文你将能根据业务场景自由定制日期范围的显示格式并理解 format 在组件内部从字符串到 UI 模式的完整生效链路。一、示例文档全景一屏看懂 format 的全部玩法官方示例docs/pages/components/date-range-picker/fragments/format.md在一段紧凑的代码中密集展示了 10 种格式组合是理解DateRangePicker格式定制的最佳起点import { DateRangePicker, Stack } from rsuite; import { FaCalendar, FaClock } from react-icons/fa; import { BsCalendar2MonthFill } from react-icons/bs; const App () ( Stack spacing{10} directioncolumn alignItemsflex-start {/* 美式短日期 自定义分隔符 */} DateRangePicker formatMM/dd/yyyy character – / {/* 欧式日期日在前 */} DateRangePicker formatdd.MM.yyyy / {/* 缩写月份 年份 */} DateRangePicker formatMMM dd, yyyy / {/* 全称月份 */} DateRangePicker formatMMMM dd, yyyy / {/* 中文日期 */} DateRangePicker formatyyyy年MM月dd日 / {/* 24 小时制日期时间 */} DateRangePicker formatMM/dd/yyyy HH:mm / {/* 12 小时制 上下午标记 */} DateRangePicker formatMM/dd/yyyy hh:mm aa showMeridiem / {/* 纯月份选择器自定义日历图标 */} DateRangePicker formatMMM yyyy caretAs{BsCalendar2MonthFill} ranges{[]} / {/* 纯时间选择器 */} DateRangePicker formatHH:mm:ss caretAs{FaClock} ranges{[]} / {/* 完整日期时间12 小时制 秒 上下午 */} DateRangePicker formatdd MMM yyyy hh:mm:ss aa showMeridiem caretAs{FaCalendar} ranges{[]} / /Stack ); ReactDOM.render(App /, document.getElementById(root));这段示例覆盖了本组件格式定制涉及的全部核心属性下文逐项展开属性示例中的取值作用formatMM/dd/yyyy、dd.MM.yyyy、yyyy年MM月dd日、HH:mm、hh:mm aa、MMM yyyy等定义输入框与日历头部展示的日期时间格式同时驱动组件渲染模式character – 两个日期之间的分隔字符串默认 ~ showMeridiemtrue启用 12 小时制并显示 AM/PM上午/下午标记caretAsBsCalendar2MonthFill、FaClock、FaCalendar自定义输入框右侧的日历图标caret 图标组件ranges[]预置快捷范围列表设为空数组可隐藏「今天/昨天/最近 7 天」等快捷选项相关属性在源码中的默认值与类型定义在 src/DateRangePicker/DateRangePicker.tsx 的接口定义中可以看到/** * Format of the date displayed in the input box */ format?: string; /** * The character that separates two dates * default ~ */ character?: string; /** * Meridiem format for 12-hour time */ showMeridiem?: boolean; /** * Custom caret component */ caretAs?: React.ElementType | null;组件实例化时的默认值同文件 L283-L336 的解构取值character ~ 、showHeader true、placeholder 、placement bottomStartformat的默认值并非在组件内部写死而是取自语言环境见下节。ranges不传时则使用内置的默认快捷范围Today / Yesterday / Last 7 days参见 docs/pages/components/date-range-picker/en-US/index.md 中的ts:Ranges定义。二、format 的默认值与运行时解析format 字符串如何生效2.1 默认格式来自 locale在 src/DateRangePicker/DateRangePicker.tsx 中format的默认值与范围格式是这样拼装的const formatStr format || locale?.shortDateFormat || yyyy-MM-dd; const rangeFormatStr ${formatStr}${character}${formatStr};也就是说显式传入的format优先级最高未传时回退到当前 locale 的shortDateFormat例如en_US为MM/dd/yyyyzh_CN为yyyy/MM/ddde_DE为dd.MM.yyyy见 src/locales/en_US.ts 与 src/locales/de_DE.ts再兜底为yyyy-MM-dd范围格式输入框显示与日历头部显示是formatStr character formatStr的拼接结果。同时每个 locale 都配有对应的dateLocaledate-fns 的 locale 对象格式令牌如MMM、MMMM的中英文显示文本正是通过它解析的。2.2 format 字符串 → 组件渲染模式useDateModeformat不仅仅是显示文本它还决定了DateRangePicker弹层内部渲染什么内容。在 src/internals/utils/date/useDateMode.ts 中定义了DateMode枚举与判定逻辑export enum DateMode { Date date, Month month, Time time, DateTime datetime } export const useDateMode (format: string) { const mode useMemo(() { if (shouldRenderDate(format) shouldRenderTime(format)) { return DateMode.DateTime; } if (shouldOnlyRenderMonth(format)) { return DateMode.Month; } if (shouldOnlyRenderTime(format)) { return DateMode.Time; } if (shouldRenderDate(format)) { return DateMode.Date; } return DateMode.Date; // Default fallback }, [format]); // ... };回到DateRangePicker内部src/DateRangePicker/DateRangePicker.tsxconst { mode, has } useDateMode(formatStr); // Show only the calendar month panel. formatStr yyyy-MM const onlyShowMonth mode DateMode.Month; // Only show the time panel. formatStr HH:mm:ss const onlyShowTime mode DateMode.Time;由此可以归纳出 format 驱动的四种组件形态format 示例DateMode组件行为MM/dd/yyyy、dd.MM.yyyydate完整日历双面板选中日期后输入框显示格式化日期MMM yyyy、yyyy年MM月month仅显示月份面板适合「按月份选范围」场景HH:mm:ss、hh:mm aatime仅显示时间选择面板见 src/DateRangePicker/Header.tsx 之外的时间面板渲染示例中因此同时传入ranges{[]}隐藏快捷范围MM/dd/yyyy HH:mmdatetime日期面板 时间联动两个日期各自附带时间useDateMode还返回has方法/Yy/、/[ML]/、/[Dd]/、/([Hhms])/组件用它判断 format 中是否含年/月/日/时间片段例如切换日期时通过copyTime保持时间不变src/DateRangePicker/DateRangePicker.tsx以及在同一月份内调整两个日历面板的间距calendarGap。2.3 format 令牌速查表format采用 date-fns 的格式化令牌语法由CustomContext.formatDate统一执行格式化见 src/internals/Provider/CustomContext.tsx令牌含义示例输出yyyy四位年份2024yy两位年份24MM两位月份01~12MMM月份缩写Jan、FebMMMM月份全称Januarydd两位日期01~31HH24 小时制小时两位00~23hh12 小时制小时两位01~12mm分钟两位00~59ss秒两位00~59aaAM/PM 标记需配合showMeridiemAM、PM任意字面字符如年、月、日、.、/、-都可以直接写入 format 作为分隔符这也是示例中yyyy年MM月dd日能直接展示中文日期格式的原因。三、五类典型格式定制场景详解3.1 纯日期格式中美欧风格的切换DateRangePicker formatMM/dd/yyyy character – / DateRangePicker formatdd.MM.yyyy / DateRangePicker formatMMM dd, yyyy / DateRangePicker formatMMMM dd, yyyy / DateRangePicker formatyyyy年MM月dd日 /character把默认的 ~ 换成 – 输入框呈现为01/25/2024 – 02/28/2024MMM/MMMM分别输出Jan与January其实际文本由当前 locale 的dateLocale决定中文格式yyyy年MM月dd日中年/月/日是字面字符在zh_CN环境下自然呈现中文日期。3.2 日期 时间datetime 模式DateRangePicker formatMM/dd/yyyy HH:mm /HH使用 24 小时制无需showMeridiem。该格式下组件进入DateMode.DateTime选中日期后两个日历面板底部会提供各自的时间选择且切换日期时已选时间会被保留源码中通过copyTime实现src/DateRangePicker/DateRangePicker.tsx。3.3 12 小时制与上下午标记DateRangePicker formatMM/dd/yyyy hh:mm aa showMeridiem /hh表示 12 小时制小时必须搭配showMeridiem才会在时间面板中显示 AM/PM 切换若不设置showMeridiem而 format 中含hh时间面板可能因缺少上下午上下文而无法正确解析 12 小时制输入这是常见的易错点aa是 AM/PM 文本令牌小写aa输出AM/PMAA输出A.M./P.M.等本地化变体。3.4 纯月份选择DateRangePicker formatMMM yyyy caretAs{BsCalendar2MonthFill} ranges{[]} /formatMMM yyyy使组件进入DateMode.Month弹层只渲染月份面板适合「统计周期按月」类业务此时caretAs换成月份图标BsCalendar2MonthFill更贴合语义ranges{[]}用于隐藏与月份选择无关的默认快捷范围。3.5 纯时间范围选择DateRangePicker formatHH:mm:ss caretAs{FaClock} ranges{[]} /formatHH:mm:ss进入DateMode.Time弹层仅显示时间面板onlyShowTime为 true面板宽度也随之收缩见 src/DateRangePicker/DateRangePicker.tsx 中minWidth: showOneCalendar || onlyShowTime ? auto : 528。caretAs{FaClock}将输入框图标替换为时钟图标。在 fragments/format-date-time.md 中还有更完整的「时间范围」与「Meridiem 时间」示例DateRangePicker formathh:mm aa showMeridiem defaultCalendarValue{[new Date(2022-02-01 00:00:00), new Date(2022-05-01 23:59:59)]} /四、分隔符 character、图标 caretAs 与配套属性4.1 character定制两日期之间的连接符character只影响显示层面输入框字符串、日历头部Header以及getInputHtmlSize计算输入框宽度时都会用到它src/DateRangePicker/DateRangePicker.tsx、src/DateRangePicker/Header.tsx。任意字符串含空格与中文标点均可使用。4.2 caretAs替换右侧日历图标caretAs接受任意 React 组件类型。示例演示了三种图标方案react-icons的FaCalendar、FaClock与react-icons/bs的BsCalendar2MonthFill也可以传入 rsuite 自带图标如rsuite/icons/Calendar这也是组件默认图标来源见 src/DateRangePicker/DateRangePicker.tsx。同类用法还出现在 fragments/caret.md 的「Custom Calendar Icon」示例中。4.3 相关的输入框显示控制showHeader默认true控制日历弹层顶部是否显示格式化的日期范围摘要Header组件内部同样使用formatStr与character渲染src/DateRangePicker/Header.tsxeditable默认true允许键盘直接输入日期输入的解析依赖与 format 一致的parseDaterenderValue当默认的formatDate(start, formatStr) character formatDate(end, formatStr)拼接不满足需求时可传入(value, format) string完全自定义输入框文本placeholder无值时显示的占位文本。五、格式化在组件内部的完整链路把上面的源码证据串联起来format 在DateRangePicker中的完整生效链路如下format 属性或 locale.shortDateFormat 兜底 │ ├─► formatStr format || locale?.shortDateFormat || yyyy-MM-dd ├─► rangeFormatStr formatStr character formatStr ──► 输入框 / 日历头部显示 ├─► useDateMode(formatStr) ──► mode ──► onlyShowMonth / onlyShowTime │ │ │ │ └─► has(year|month|day|time) ──► copyTime 保持时间 / calendarGap 双面板间距 │ └─► formatDate(date, formatStr)来自 CustomContext经 date-fns dateLocale 输出──► 输入框文本其中formatDate由CustomProvider注入src/internals/Provider/CustomContext.tsx因此 format 令牌的中英文输出、aa的本地化变体都随 locale 联动这也解释了为什么切换语言环境后同一format的MMM/MMMM/aa输出会自动变化。六、组合实战建议确定需求形态先选 format仅日期用MM/dd/yyyy类格式按月选范围用MMM yyyy仅时间用HH:mm:ss含时间用MM/dd/yyyy HH:mm24 小时或hh:mm aashowMeridiem12 小时。用 character 对齐产品文案中文场景可设character至或 – 避免默认波浪号 ~ 显得随意。用 caretAs 强化语义月份选择配月份图标、时间范围配时钟图标减少用户理解成本。与 ranges、showHeader 搭配纯时间/纯月份模式下建议ranges{[]}隐藏无关快捷范围需要头部摘要可保持showHeader默认开启需要更大的弹层空间时可关闭。验证联动行为datetime 模式下切换日期时间是否保留、12 小时制是否出现 AM/PM 面板都可直接用文中的最小示例在本地运行验证组件源码位于 src/DateRangePicker/完整属性表见 docs/pages/components/date-range-picker/en-US/index.md。赞分享前端UI组件【免费下载链接】rsuite A suite of React components .项目地址https://gitcode.com/gh_mirrors/rs/rsuite点击查看免费下载相关推荐RSuite DateRangeInput 日期格式自定义完全指南format 与 character 深入解析RSuite DateRangeInput 日期格式自定义完全指南format 与 character 深入解析 DateRangeInput 是 RSuit前端UI组件layui日期格式自定义显示格式与解析layui日期格式自定义显示格式与解析 还在为日期格式不统一而烦恼还在手动拼接日期字符串layui的laydate组件提供了强大的日期格式自定义功能让你前端UI组件antd DatePicker 日期格式化实战用 format 属性自定义 yyyy/MM/dd 等显示格式antd DatePicker 日期格式化实战用 format 属性自定义 yyyy/MM/dd 等显示格式 format 是 ant designantdUI组件前端设计系统上一篇Akula存储层深度解析MDBX数据库在以太坊状态管理中的应用 下一篇Torchdyn完全指南从零开始掌握神经微分方程的PyTorch实现创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考