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

如何修改MUI DateCalendar的星期表头与箭头位置?

MUI DateCalendar 自定义星期表头与月份切换箭头方案

一、修改星期表头为完整缩写格式(Sun Mon Tue Wed Thu Fri Sat)

方法1:通过Dayjs本地化配置

利用AdapterDayjs的本地化能力,设置英文locale即可让星期表头显示完整缩写:

import * as React from "react";
import { DateCalendar } from "@mui/x-date-pickers/DateCalendar";
import { AdapterDayjs } from "@mui/x-date-pickers/AdapterDayjs";
import { LocalizationProvider } from "@mui/x-date-pickers/LocalizationProvider";
import dayjs, { Dayjs } from "dayjs";
import "dayjs/locale/en";

// 全局设置dayjs的英文本地化
dayjs.locale("en");

export default function Calendar(props) {
  const [value, setValue] = React.useState(dayjs("2022-04-17"));
  return (
    <LocalizationProvider dateAdapter={AdapterDayjs}>
      <DateCalendar
        value={value}
        onChange={(newValue) => setValue(newValue)}
      />
    </LocalizationProvider>
  );
}

方法2:自定义WeekDay组件

如果本地化配置不生效,可直接替换星期表头的渲染组件,完全自定义显示内容:

import * as React from "react";
import { DateCalendar } from "@mui/x-date-pickers/DateCalendar";
import { AdapterDayjs } from "@mui/x-date-pickers/AdapterDayjs";
import { LocalizationProvider } from "@mui/x-date-pickers/LocalizationProvider";
import dayjs, { Dayjs } from "dayjs";

// 自定义星期表头单元格组件
const CustomWeekDay = ({ day }: { day: number }) => {
  const dayNames = ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"];
  return <div style={{ textAlign: "center", padding: "8px" }}>{dayNames[day]}</div>;
};

export default function Calendar(props) {
  const [value, setValue] = React.useState(dayjs("2022-04-17"));
  return (
    <LocalizationProvider dateAdapter={AdapterDayjs}>
      <DateCalendar
        value={value}
        onChange={(newValue) => setValue(newValue)}
        components={{ WeekDay: CustomWeekDay }}
      />
    </LocalizationProvider>
  );
}

二、调整月份切换箭头的位置

方法1:通过sx属性覆盖默认样式

利用MUI的sx内联样式,直接修改箭头容器和按钮的布局:

import * as React from "react";
import { DateCalendar } from "@mui/x-date-pickers/DateCalendar";
import { AdapterDayjs } from "@mui/x-date-pickers/AdapterDayjs";
import { LocalizationProvider } from "@mui/x-date-pickers/LocalizationProvider";
import dayjs, { Dayjs } from "dayjs";

export default function Calendar(props) {
  const [value, setValue] = React.useState(dayjs("2022-04-17"));
  return (
    <LocalizationProvider dateAdapter={AdapterDayjs}>
      <DateCalendar
        value={value}
        onChange={(newValue) => setValue(newValue)}
        sx={{
          // 调整标题栏整体布局,让箭头和标题均匀分布
          ".MuiPickersCalendarHeader-root": {
            justifyContent: "space-between",
            alignItems: "center",
          },
          // 自定义左侧箭头间距
          ".MuiPickersArrowSwitcher-button--left": {
            marginRight: "12px",
          },
          // 自定义右侧箭头间距
          ".MuiPickersArrowSwitcher-button--right": {
            marginLeft: "12px",
          },
          // 让月份标题居中占满中间空间
          ".MuiPickersCalendarHeader-labelContainer": {
            flex: 1,
            textAlign: "center",
          },
        }}
      />
    </LocalizationProvider>
  );
}

方法2:自定义CalendarHeader组件

如果需要完全自定义箭头的样式和位置,可以替换整个月份标题栏组件:

import * as React from "react";
import { DateCalendar } from "@mui/x-date-pickers/DateCalendar";
import { AdapterDayjs } from "@mui/x-date-pickers/AdapterDayjs";
import { LocalizationProvider } from "@mui/x-date-pickers/LocalizationProvider";
import dayjs, { Dayjs } from "dayjs";
import IconButton from "@mui/material/IconButton";
import ArrowLeftIcon from "@mui/icons-material/ArrowLeft";
import ArrowRightIcon from "@mui/icons-material/ArrowRight";

// 自定义月份标题栏组件
const CustomCalendarHeader = ({ date, decreaseMonth, increaseMonth }: any) => {
  return (
    <div style={{ 
      display: "flex", 
      alignItems: "center", 
      padding: "8px 16px",
      gap: "16px"
    }}>
      {/* 左侧箭头 */}
      <IconButton onClick={decreaseMonth} size="small">
        <ArrowLeftIcon />
      </IconButton>
      {/* 月份标题 */}
      <span style={{ flex: 1, textAlign: "center", fontSize: "1rem", fontWeight: 500 }}>
        {date.format("MMMM YYYY")}
      </span>
      {/* 右侧箭头 */}
      <IconButton onClick={increaseMonth} size="small">
        <ArrowRightIcon />
      </IconButton>
    </div>
  );
};

export default function Calendar(props) {
  const [value, setValue] = React.useState(dayjs("2022-04-17"));
  return (
    <LocalizationProvider dateAdapter={AdapterDayjs}>
      <DateCalendar
        value={value}
        onChange={(newValue) => setValue(newValue)}
        components={{ CalendarHeader: CustomCalendarHeader }}
      />
    </LocalizationProvider>
  );
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 23:40:55