Похоже, это относится к нативному JS Дата, неправильно разбирающая даты в ГБ. Единственный способ решить эту проблему - обернуть DatePicker в 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;