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

如何在Material-UI Picker月视图中将月份格式化为长名称?

问题原因

你重写的getMonthText方法不负责月视图选择列表的月份名称渲染,该场景下Picker默认调用的是getMonthShort方法获取短格式月份,所以你的修改没有生效。

解决方案

方案1:重写工具类方法(全局生效)

补充导入date-fns的format方法,同时重写getMonthShort即可,你也可以同步重写getMonthText覆盖其他场景的月份展示:

import DateFnsUtils from '@date-io/date-fns';
import { format } from 'date-fns';

class LocalizedUtils extends DateFnsUtils {
  // 覆盖月视图选择列表的月份展示
  getMonthShort(date: Date) {
    return format(date, 'MMMM');
  }
  // 覆盖日历头部、输入框等场景的月份展示
  getMonthText(date: Date) {
    return format(date, 'MMMM');
  }
  // 你原有的日期格式化逻辑
  getDayText(date: Date) {
    return format(date, 'do');
  }
}

// 外层Provider配置保持不变,注意修正你原代码中DatePicker的拼写错误
<MuiPickersUtilsProvider utils={LocalizedUtils}>
  <DatePicker {/* 你的原有props */} />
</MuiPickersUtilsProvider>

方案2:自定义组件渲染(仅当前组件生效)

如果你只需要修改单个DatePicker的月份展示,不需要全局生效,可以直接用组件自带的renderMonth属性自定义渲染:

import { format } from 'date-fns';
import { DatePicker, Typography } from '@material-ui/pickers';

<DatePicker
  renderMonth={(monthDate, isSelected) => (
    <Typography>{format(monthDate, 'MMMM')}</Typography>
  )}
  {/* 其他原有props */}
/>

本地化场景补充

如果你需要展示非英文的月份(比如中文),不需要单独重写格式化方法,直接传入date-fns对应的本地化包即可:

import zhCN from 'date-fns/locale/zh-CN';
import DateFnsUtils from '@date-io/date-fns';

<MuiPickersUtilsProvider utils={DateFnsUtils} locale={zhCN}>
  <DatePicker />
</MuiPickersUtilsProvider>

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 11:15:03