我无法让 Material UI DatePicker 正确解析英国日期

I can't get Material UI DatePicker to correctly parse UK dates

据我了解,如果我希望 MUI DatePicker 正确解析英国日期(先是天,然后是月),我必须将 en-GB 区域设置传递给 MuiPickersUtilsProvider。但是,我这样做的尝试失败了。

下面的代码..

import React from "react";
import { MuiPickersUtilsProvider } from "@material-ui/pickers";
import DateFnsUtils from "@date-io/date-fns";
import DatePicker from "./DatePicker2";
import enGB from "date-fns/locale/en-GB";

const App = () => (
  <MuiPickersUtilsProvider utils={DateFnsUtils} locale={enGB}>
    <DatePicker value={"2/4/2020"} />
  </MuiPickersUtilsProvider>
);

export default App;

..将在应该显示“2020 年 4 月 2 日”时显示日期“2020 年 2 月 4 日”。

我做错了什么?

这似乎与原生 JS 日期未正确解析 GB 日期有关。我可以解决此问题的唯一方法是将 DatePicker 包装在 GbDatePicker 中,该 GbDatePicker 可以正确解析传入的字符串。感觉很老套,所以我对更好的想法很感兴趣..

import { isValid } from 'date-fns';
import React, { useEffect, useState } from 'react';
import { DatePicker as MuiDatePicker } from '@material-ui/pickers';

const GbDatePicker = (props) => {
  const { value, ...other } = props;
  const [intVal, setIntVal] = useState(value);
  const isSynced = intVal === value;

  useEffect(() => {
    if (!isSynced) {
      if (
        typeof value !== 'undefined' &&
        value !== null &&
        value !== '' &&
        isValid(new Date(value))
      ) {
        const delim = value.includes('/')
          ? /\//g
          : value.includes('-')
          ? '-'
          : value.includes(' ')
          ? ' '
          : null;
        if (delim !== null) {
          const parts = value.split(delim);
          if (parts.length === 3 && !isNaN(parts[1])) {
            setIntVal(new Date(parts[2], parts[1] - 1, parts[0]));
          } else {
            setIntVal(new Date(value));
          }
        } else {
          setIntVal(new Date(value));
        }
      }
    }
  }, [value, isSynced]);

  return <MuiDatePicker value={intVal} {...other} />;
};

export default GbDatePicker;

这是一个将选择器时区锁定为 UTC 的示例要点。 您可以对任何其他时区执行完全相同的操作 https://gist.github.com/sibelius/37e7780c2a4a85ba1fea0b5cff196565