javascript - ¿Cómo formatear la fecha en el selector de fechas de React material-ui?
Estoy implementando redux-form con un campo de selector de fecha de material-ui. La fecha se establece perfectamente en el campo, pero cuando intento enviarla a la API del back-end, el formato de la fecha es:
BeginDate_1: Tue Nov 14 2017 15:03:43 GMT+0530 (IST)Estoy intentando cambiar este formato al formato 'YYYY-mm-dd' antes de enviarlo a la API del back-end.
Intenté momentjs para formatear, pero no pude obtener el resultado que quería.
Esto es lo que he probado:
Inicio.js
import React, {Component} from 'react';
import {Field, reduxForm} from 'redux-form';
import DatePicker from 'material-ui/DatePicker';
import {connect} from 'react-redux';
import * as moment from 'moment';
class Home extends Component {
renderCalendarField= ({
input,
label,
meta: {touched, error},
children,
...custom
}) => (
<DatePicker
floatingLabelText={label}
errorText={touched && error}
{...input}
value = {input.value !== ''? new Date(input.value) : null}
onChange={(event, value) => input.onChange(value)}
children={children}
{...custom}
formatDate={(date) => moment(date).format('YYYY-MM-DD')}
/>
)
render() {
const startDate = new Date();
const {handleSubmit} = this.props;
return (
<form onSubmit={handleSubmit(this.onSubmit.bind(this))}>
<div>
<Field name="BeginDate_1" component={this.renderCalendarField} label="DEPARTURE" minDate={startDate} />
</div>
<div>
<button type="submit">
Submit
</button>
</div>
</form>
);
}
}
const LogInForm = reduxForm({
form: 'MaterialUiForm', // a unique identifier for this form
validate
})(Home);
export default connect(mapStateTOProps, {getCity})(LogInForm);
La salida de la consola todavía es:
BeginDate_1:Tue Nov 14 2017 15:03:43 GMT+0530 (IST)¿Cómo puedo formatear esta fecha en el formato YYYY-mm-dd?
Respuesta #1
La propiedad formatDate en el DatePicker se usa para formatear la Fecha de Display y no el valor real. Lo que necesitas hacer es formatear el valor en la función onSubmit usando moment
onSubmit (values) {
const beginDate = moment(values.BeginDate_1).format('YYYY-MM-DD')
console.log(beginDate);
//other things
}
Según la documentación de material-ui/DatePicker:
formatDate: función
Esta función se llama para formatear la fecha que se muestra en el campo de entrada y debe devolver una cadena. Por defecto, si no se proporciona una configuración regional ni DateTimeFormat, los objetos de fecha se formatean a
ISO 8601 YYYY-MM-DD.Firma :
function(date: object) => any date: Date object to be formatted. returns (any): The formatted date.
