You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何自定义MUI X Time Picker的小时排序与分钟选项?

MUI TimePicker 自定义小时排序与分钟选项实现方案

1. 实现小时从01-12升序排列

默认12小时制的小时选项以12开头,要改为01/02…12的升序排列,可通过自定义小时数组替换默认列表,并配合格式化显示:

import { TimePicker } from '@mui/x-date-pickers/TimePicker';
import { LocalizationProvider } from '@mui/x-date-pickers/LocalizationProvider';
import { AdapterDayjs } from '@mui/x-date-pickers/AdapterDayjs';

export default function CustomHourTimePicker() {
  // 生成1到12的升序小时数组
  const customHours = Array.from({ length: 12 }, (_, i) => i + 1);

  return (
    <LocalizationProvider dateAdapter={AdapterDayjs}>
      <TimePicker
        label="12小时制升序小时"
        ampm={true}
        slotProps={{
          clockPicker: {
            hours: customHours,
            // 将小时格式化为两位数字(如01、02)
            renderHour: (hour) => String(hour).padStart(2, '0'),
          },
        }}
      />
    </LocalizationProvider>
  );
}

2. 仅显示特定分钟选项(如00、30)

通过自定义分钟数组,仅保留需要的选项,即可隐藏其余分钟值:

import { TimePicker } from '@mui/x-date-pickers/TimePicker';
import { LocalizationProvider } from '@mui/x-date-pickers/LocalizationProvider';
import { AdapterDayjs } from '@mui/x-date-pickers/AdapterDayjs';

export default function CustomMinuteTimePicker() {
  // 定义需要显示的分钟选项
  const customMinutes = [0, 30];

  return (
    <LocalizationProvider dateAdapter={AdapterDayjs}>
      <TimePicker
        label="仅显示00/30分钟"
        slotProps={{
          clockPicker: {
            minutes: customMinutes,
            // 将分钟格式化为两位数字(如00、30)
            renderMinute: (minute) => String(minute).padStart(2, '0'),
          },
        }}
      />
    </LocalizationProvider>
  );
}

合并两个需求的完整示例

将上述两个配置合并,实现同时自定义小时排序和分钟选项:

import { TimePicker } from '@mui/x-date-pickers/TimePicker';
import { LocalizationProvider } from '@mui/x-date-pickers/LocalizationProvider';
import { AdapterDayjs } from '@mui/x-date-pickers/AdapterDayjs';

export default function CustomTimePicker() {
  const customHours = Array.from({ length: 12 }, (_, i) => i + 1);
  const customMinutes = [0, 30];

  return (
    <LocalizationProvider dateAdapter={AdapterDayjs}>
      <TimePicker
        label="自定义小时与分钟"
        ampm={true}
        slotProps={{
          clockPicker: {
            hours: customHours,
            minutes: customMinutes,
            renderHour: (hour) => String(hour).padStart(2, '0'),
            renderMinute: (minute) => String(minute).padStart(2, '0'),
          },
        }}
      />
    </LocalizationProvider>
  );
}

内容的提问来源于stack exchange,提问作者Lys

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.19 05:38:13