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

如何在MUI X DatePicker组件中实现双日历单日期选择?

实现MUI X DatePicker单日期选择并显示双日历

要实现单日期选择同时显示两个日历,可通过以下两种方式实现:

方法一:自定义Calendar插槽(推荐,基础版组件即可用)

利用MUI X的MultiViewCalendar组件支持多月份显示的特性,替换DatePicker默认的日历组件:

  1. 导入所需组件:
import { DatePicker } from '@mui/x-date-pickers/DatePicker';
import { MultiViewCalendar } from '@mui/x-date-pickers/MultiViewCalendar';
import { LocalizationProvider } from '@mui/x-date-pickers/LocalizationProvider';
import { AdapterDayjs } from '@mui/x-date-pickers/AdapterDayjs';
import dayjs from 'dayjs';
import { useState } from 'react';
  1. 编写组件代码:
export default function DualCalendarDatePicker() {
  const [selectedDate, setSelectedDate] = useState(dayjs());

  return (
    <LocalizationProvider dateAdapter={AdapterDayjs}>
      <DatePicker
        label="选择日期"
        value={selectedDate}
        onChange={setSelectedDate}
        slotProps={{
          calendar: ({ value, onChange, ...rest }) => (
            <MultiViewCalendar
              {...rest}
              numberOfMonths={2} // 设置显示2个日历
              value={value}
              onChange={(newValue) => onChange(newValue)}
            />
          )
        }}
      />
    </LocalizationProvider>
  );
}

方法二:改造DateRangePicker(适用于Pro版本)

若使用MUI X Pro版的DateRangePicker,可通过隐藏结束日期输入框,强制实现单日期选择:

import { DateRangePicker } from '@mui/x-date-pickers-pro/DateRangePicker';
import { LocalizationProvider } from '@mui/x-date-pickers/LocalizationProvider';
import { AdapterDayjs } from '@mui/x-date-pickers/AdapterDayjs';
import { TextField } from '@mui/material';
import dayjs from 'dayjs';
import { useState } from 'react';

export default function DualCalendarSinglePicker() {
  const [selectedDate, setSelectedDate] = useState(dayjs());

  return (
    <LocalizationProvider dateAdapter={AdapterDayjs}>
      <DateRangePicker
        calendars={2} // 设置显示2个日历
        value={[selectedDate, null]}
        onChange={([newDate]) => setSelectedDate(newDate)}
        slots={{
          startInput: (props) => <TextField {...props} label="选择日期" />,
          endInput: () => null, // 隐藏结束日期输入框
        }}
      />
    </LocalizationProvider>
  );
}

两种方法都能实现单日期选择+双日历显示的效果,方法一无需依赖Pro版本,兼容性更强。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 02:42:19