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

MUI X Date Picker设置maxDate后默认打开至1900年,如何调整?

解决方案

1. 让年份选择器默认打开到maxDate对应的年份

可以通过initialVisibleMonth属性指定初始显示的月份,直接设置为maxDate对应年份的第一个月即可:

<DatePicker
  label="Date picker"
  openTo="year"
  maxDate={new Date(2007, 11, 31)}
  initialVisibleMonth={() => new Date(2007, 0)} // 定位到2007年1月
  renderInput={(params) => <TextField {...params} />}
/>

这个属性会强制日期选择器打开时直接聚焦到指定的年份区间,解决默认跳转到1900年的问题。

2. 将年份按降序排列

如果需要年份倒序显示,可以通过renderYearPicker自定义年份选择器的渲染逻辑,手动生成倒序的年份列表:

<DatePicker
  label="Date picker"
  openTo="year"
  maxDate={new Date(2007, 11, 31)}
  renderYearPicker={(props) => {
    const { minDate, maxDate, onYearChange, selectedDate } = props;
    const startYear = minDate.getFullYear();
    const endYear = maxDate.getFullYear();
    
    // 生成倒序年份数组
    const years = [];
    for (let year = endYear; year >= startYear; year--) {
      years.push(year);
    }

    return (
      <Box sx={{ display: 'flex', flexWrap: 'wrap', gap: 1, p: 2 }}>
        {years.map((year) => (
          <Button
            key={year}
            variant={selectedDate?.getFullYear() === year ? 'contained' : 'outlined'}
            onClick={() => onYearChange(new Date(year, 0, 1))}
          >
            {year}
          </Button>
        ))}
      </Box>
    );
  }}
  renderInput={(params) => <TextField {...params} />}
/>

这段代码会把可选年份从maxDate的年份开始倒序排列,点击年份后正常触发选择逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 19:07:36