跳到内容
+

日期格式和本地化

日期和时间选择器支持来自不同语言环境的格式。

开始使用

MUI X 的默认语言环境是英语(美国)。如果您想使用其他语言环境,请按照以下说明操作。

设置自定义语言环境

使用 dayjs

对于 dayjs,导入语言环境,然后将其名称传递给 LocalizationProvider

import { AdapterDayjs } from '@mui/x-date-pickers/AdapterDayjs';
import 'dayjs/locale/de';

<LocalizationProvider dateAdapter={AdapterDayjs} adapterLocale="de">
  {children}
</LocalizationProvider>;

使用 date-fns

对于 date-fns,导入语言环境并将其传递给 LocalizationProvider

// with date-fns v2.x
import { AdapterDateFns } from '@mui/x-date-pickers/AdapterDateFns';
// with date-fns v3.x or v4.x
import { AdapterDateFns } from '@mui/x-date-pickers/AdapterDateFnsV3';
// with date-fns v2.x
import de from 'date-fns/locale/de';
// with date-fns v3.x or v4.x
import { de } from 'date-fns/locale/de';

<LocalizationProvider dateAdapter={AdapterDateFns} adapterLocale={de}>
  {children}
</LocalizationProvider>;

使用 luxon

对于 luxon,将语言环境名称传递给 LocalizationProvider

import { AdapterLuxon } from '@mui/x-date-pickers/AdapterLuxon';

<LocalizationProvider dateAdapter={AdapterLuxon} adapterLocale="de">
  {children}
</LocalizationProvider>;

使用 moment

对于 moment,导入语言环境,然后将其名称传递给 LocalizationProvider

import { AdapterMoment } from '@mui/x-date-pickers/AdapterMoment';
import 'moment/locale/de';

<LocalizationProvider dateAdapter={AdapterMoment} adapterLocale="de">
  {children}
</LocalizationProvider>;

子午线 — 12 小时/24 小时格式

所有时间和日期时间组件将自动调整为语言环境的时间设置,即 12 小时或 24 小时格式。您可以使用 ampm 属性覆盖默认设置

自定义格式

以下描述的属性接收的格式取决于您正在使用的日期库。请参阅每个库的文档以获取完整的格式表

自定义字段格式

字段具有默认格式,该格式取决于正在使用的选择器、启用的视图以及 12 小时/24 小时格式。

如果此默认格式不适合您,您可以使用 format 属性自定义它

Enter 开始编辑

字段支持的格式

某些格式可能尚未被字段支持。例如,它们不支持一年中的第几天或季度。

以下是当前支持的格式列表

  • 年份

    • ✅ 2 位数字值(例如:23
    • ✅ 4 位数字值(例如:2023
    • ❌ 带序数值的值(例如:2023th
  • 月份

    • ✅ 基于 1 的数字(例如:08
    • ✅ 多字母值(例如 AugAugust
    • ❌ 单字母值(例如:A),因为多个月份用同一个字母表示
  • 月份中的日期

    • ✅ 基于 1 的数字值(例如:24
    • ✅ 带序数的基于 1 的数字值(例如:24th
  • 星期几

    • ✅ 基于 0 的数字值(例如:03
    • ✅ 基于 1 的数字值(例如:04
    • ✅ 多字母值(例如:TueTuesday
    • ❌ 单字母值(例如:T),因为多个星期几用同一个字母表示
  • 小时

    • ✅ 基于 0 的 12 小时值(例如:03
    • ✅ 基于 0 的 24 小时值(例如:15
    • ❌ 基于 1 的值(例如:24 而不是 00
  • 分钟

  • 子午线

如果您需要使用尚不支持的格式,请打开一个 issue 描述您的确切用例。未来可能会支持一些新格式,具体取决于实现的复杂性。

尊重字段中的前导零

默认情况下,字段中呈现的值始终包含数字零,即使您的格式另有说明。您可以通过将 shouldRespectLeadingZeros 属性设置为 true 来强制字段尊重您的格式信息。

Enter 开始编辑

自定义字段占位符

当某个部分为空时,字段会显示其占位符而不是空值。例如,如果您没有填写 year 部分的任何值,则字段将呈现年份占位符。

这些占位符基于您当前的组件本地化,而不是您的日期本地化。

英语语言环境(默认)

德语语言环境

Enter 开始编辑

有关如何定义组件本地化的更多信息,请查看已翻译的组件页面。

您可以根据需要自定义特定的占位符部分翻译。所有可用的占位符翻译方法及其参数都可以在 源文件 中找到。如果您需要更精细的控制,可以使用在 LocalizationProvider 或特定 Picker 组件上定义的 localeText 属性来覆盖它们。

一个常见的用例是将月份部分的占位符更改为简短的字母形式(Jan、Feb 等)。默认的翻译实现可能不是您想要的,因此您可以覆盖它

<LocalizationProvider
  dateAdapter={AdapterDayjs}
  localeText={{
    fieldMonthPlaceholder: (params) =>
      params.contentType === 'digit' ? 'MM' : params.format,
  }}
>
  <DatePicker />
</LocalizationProvider>

自定义工具栏格式

要自定义工具栏中使用的格式,请使用 toolbar 插槽的 toolbarFormat 属性。

选择日期

4 月 17 日星期日

Enter 开始编辑

自定义星期几格式

使用 dayOfWeekFormatter 自定义日历标题中的星期名称。此属性接受两个参数,day(星期名称的字符串)和 date(日期库格式的日期),并返回要显示的格式化字符串。默认格式化程序仅保留名称的第一个字母并将其大写。

以下示例在日历标题中的每个日期末尾添加一个点

日.一.二.三.四.五.六.
Enter 开始编辑

自定义日历标题格式

要自定义日历标题上使用的格式,请使用 calendarHeader 插槽的 format 属性。

04/2022
05/2022
Enter 开始编辑

自定义每周开始日

日期和时间选择器使用您的日期库提供的星期设置。每个适配器都使用其语言环境来定义每周的开始日。

如果您的适配器语言环境中定义的默认每周开始日不是您想要的,您可以按照以下示例所示覆盖它。

使用 dayjs

对于 dayjs,使用 updateLocale 插件

import updateLocale from 'dayjs/plugin/updateLocale';

dayjs.extend(updateLocale);

// Replace "en" with the name of the locale you want to update.
dayjs.updateLocale('en', {
  // Sunday = 0, Monday = 1.
  weekStart: 1,
});

使用 date-fns

对于 date-fns,覆盖所用语言环境的 options.weekStartsOn

import { Locale } from 'date-fns';
// with date-fns v2.x
import enUS from 'date-fns/locale/en-US';
// with date-fns v3.x
import { enUS } from 'date-fns/locale/en-US';

const customEnLocale: Locale = {
  ...enUS,
  options: {
    ...enUS.options,
    // Sunday = 0, Monday = 1.
    weekStartsOn: 1,
  },
};

<LocalizationProvider dateAdapter={AdapterDateFns} adapterLocale={customEnLocale}>

使用 luxon

对于 luxon,使用 Settings.defaultWeekSettings 对象

import { Settings, Info } from 'luxon';

Settings.defaultWeekSettings = {
  // Sunday = 7, Monday = 1.
  firstDay: 1,
  // Makes sure we don't lose the other information from `defaultWeekSettings`
  minimalDays: Info.getMinimumDaysInFirstWeek(),
  weekend: Info.getWeekendWeekdays(),
};

使用 moment

对于 moment,使用 moment.updateLocale 方法

import moment from 'moment';

// Replace "en" with the name of the locale you want to update.
moment.updateLocale('en', {
  week: {
    // Sunday = 0, Monday = 1.
    dow: 1,
  },
});

RTL 支持

支持从右到左的语言,例如阿拉伯语、波斯语或希伯来语。请按照本指南使用它们。

以下示例演示了如何将 RTL 语言(阿拉伯语)与某些日期和时间选择器组件一起使用。

API

请参阅以下文档,以获取此处提及的组件的所有可用属性和类的完整参考。