使用自定义格式的 DatePicker 日期输入
DatePicker date input with custom format
我想使用 redux-form 记录我所在州的日期。我使用反应日期选择器。为了使日期选择器与我的 redux-form 兼容,我写道:
import React, { PropTypes } from 'react';
import DatePicker from 'react-datepicker';
import moment from 'moment';
import 'react-datepicker/dist/react-datepicker.css';
const MyDatePicker = ({ input, meta: { touched, error } }) => (
<div>
<DatePicker
{...input} dateFormat="YYYY-MM-DD"
selected={input.value ? moment(input.value) : null}
/>
{
touched && error &&
<span className="error">
{error}
</span>
}
</div>
);
MyDatePicker.propTypes = {
input: PropTypes.shape().isRequired,
meta: PropTypes.shape().isRequired
};
export default MyDatePicker;
问题是,当我选择日期时,我希望它显示为 DD-MM-YYYY,但我希望日期以 YYYY-MM-DD HH:MM:SS 格式保存在我的状态中。这该怎么做?我用了moment的格式化功能,但是好像没用
如果我的理解是正确的,您只需要 2 种不同的格式用于同一日期,一种用于 UI,另一种用于保存? moment(date).format('DD-MM-YYYY')
和 moment(date).format('YYYY-MM-DD HH:MM:SS')
将为您提供两种格式的日期。
您应该使用 redux-form
为此提供的 the value lifecycle methods。
使用 parse
格式化来自 react-datepicker
的值以供存储,并使用 format
将存储的值解析回 react-datepicker
以呈现它。示例:
function formatDateForInput(storedDate) {
// the returned value will be available as `input.value`
return moment(pickedDate).format('right format for your input')
}
function parseDateForStore(pickedDate) {
// the returned value will be stored in the redux store
return moment(storedDate).format('desired format for storage')
}
<Field
component={ MyDatePicker }
format={ formatDateForInput }
parse={ parseDateForStore }
/>
如果这对您不起作用,我建议您检查是否需要在 [=12= 提供的 DatePicker
和 input
道具之间放置自定义 onChange
处理程序].因为 DatePicker
用来调用 onChange
的值可能是 redux-form
不理解的值。像这样:
const MyDatePicker = ({ input, meta: { touched, error } }) => {
const onChange = event => {
const pickedDate = event.path.to.value;
input.onChange(pickedDate);
}
return (
<div>
<DatePicker
dateFormat="YYYY-MM-DD"
selected={input.value ? moment(input.value) : null}
onChange={ onChange }
/>
{
touched && error &&
<span className="error">
{error}
</span>
}
</div>
);
}
MyDatePicker.propTypes = {
input: PropTypes.shape().isRequired,
meta: PropTypes.shape().isRequired
};
export default MyDatePicker;
希望对您有所帮助!
只需使用属性 dateFormat="dd/MM/yyyy"
示例:
<DatePicker
selected={startDate}
onChange={date => handleChange(date)}
dateFormat="DD/MM/YYYY"
/>
我使用了以下道具 -mask、inputFormat 和 format - 来改变默认格式为“yyyy-MM-dd”格式。
格式代码“yyyy-MM-dd”很重要,绕过它找到所需的格式。
示例:
<LocalizationProvider dateAdapter={AdapterDateFns} >
<DatePicker
label="SomeDate"
{...register("details_received_date")}
mask="____-__-__"
inputFormat="yyyy-MM-dd"
format="yyyy-MM-dd"
value={someDate}
onChange={(newValue) => {setSomeDate(newValue);}}
renderInput={(params) => <TextField {...params} />}
/>
</LocalizationProvider>
这将显示在前端并以所需格式提供值。
希望这有帮助。
我想使用 redux-form 记录我所在州的日期。我使用反应日期选择器。为了使日期选择器与我的 redux-form 兼容,我写道:
import React, { PropTypes } from 'react';
import DatePicker from 'react-datepicker';
import moment from 'moment';
import 'react-datepicker/dist/react-datepicker.css';
const MyDatePicker = ({ input, meta: { touched, error } }) => (
<div>
<DatePicker
{...input} dateFormat="YYYY-MM-DD"
selected={input.value ? moment(input.value) : null}
/>
{
touched && error &&
<span className="error">
{error}
</span>
}
</div>
);
MyDatePicker.propTypes = {
input: PropTypes.shape().isRequired,
meta: PropTypes.shape().isRequired
};
export default MyDatePicker;
问题是,当我选择日期时,我希望它显示为 DD-MM-YYYY,但我希望日期以 YYYY-MM-DD HH:MM:SS 格式保存在我的状态中。这该怎么做?我用了moment的格式化功能,但是好像没用
如果我的理解是正确的,您只需要 2 种不同的格式用于同一日期,一种用于 UI,另一种用于保存? moment(date).format('DD-MM-YYYY')
和 moment(date).format('YYYY-MM-DD HH:MM:SS')
将为您提供两种格式的日期。
您应该使用 redux-form
为此提供的 the value lifecycle methods。
使用 parse
格式化来自 react-datepicker
的值以供存储,并使用 format
将存储的值解析回 react-datepicker
以呈现它。示例:
function formatDateForInput(storedDate) {
// the returned value will be available as `input.value`
return moment(pickedDate).format('right format for your input')
}
function parseDateForStore(pickedDate) {
// the returned value will be stored in the redux store
return moment(storedDate).format('desired format for storage')
}
<Field
component={ MyDatePicker }
format={ formatDateForInput }
parse={ parseDateForStore }
/>
如果这对您不起作用,我建议您检查是否需要在 [=12= 提供的 DatePicker
和 input
道具之间放置自定义 onChange
处理程序].因为 DatePicker
用来调用 onChange
的值可能是 redux-form
不理解的值。像这样:
const MyDatePicker = ({ input, meta: { touched, error } }) => {
const onChange = event => {
const pickedDate = event.path.to.value;
input.onChange(pickedDate);
}
return (
<div>
<DatePicker
dateFormat="YYYY-MM-DD"
selected={input.value ? moment(input.value) : null}
onChange={ onChange }
/>
{
touched && error &&
<span className="error">
{error}
</span>
}
</div>
);
}
MyDatePicker.propTypes = {
input: PropTypes.shape().isRequired,
meta: PropTypes.shape().isRequired
};
export default MyDatePicker;
希望对您有所帮助!
只需使用属性 dateFormat="dd/MM/yyyy"
示例:
<DatePicker
selected={startDate}
onChange={date => handleChange(date)}
dateFormat="DD/MM/YYYY"
/>
我使用了以下道具 -mask、inputFormat 和 format - 来改变默认格式为“yyyy-MM-dd”格式。 格式代码“yyyy-MM-dd”很重要,绕过它找到所需的格式。
示例:
<LocalizationProvider dateAdapter={AdapterDateFns} >
<DatePicker
label="SomeDate"
{...register("details_received_date")}
mask="____-__-__"
inputFormat="yyyy-MM-dd"
format="yyyy-MM-dd"
value={someDate}
onChange={(newValue) => {setSomeDate(newValue);}}
renderInput={(params) => <TextField {...params} />}
/>
</LocalizationProvider>
这将显示在前端并以所需格式提供值。 希望这有帮助。