【问题标题】:How to format date in React material-ui date-picker?如何在 React material-ui date-picker 中格式化日期?
【发布时间】:2018-04-27 05:16:23
【问题描述】:

我正在使用 material-ui 日期选择器字段实现 redux-form。日期在字段中设置得很完美,但是当我尝试将其发送到后端 API 时,日期的格式是:

BeginDate_1: Tue Nov 14 2017 15:03:43 GMT+0530 (IST)

我正在尝试将此格式更改为“YYYY-mm-dd”格式,然后再将其发送到后端 API。

我尝试momentjs 进行格式化,但我无法得到我想要的结果。

这是我尝试过的:

Home.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);

控制台输出还是:

BeginDate_1:Tue Nov 14 2017 15:03:43 GMT+0530 (IST)

如何将这个日期格式化为YYYY-mm-dd 格式?

【问题讨论】:

    标签: javascript reactjs date react-redux momentjs


    【解决方案1】:

    DatePicker 上的formatDate 属性用于formatDisplay Date,而不是实际值。您需要做的是,使用moment 格式化onSubmit 函数中的值

    onSubmit (values) {
    
       const beginDate = moment(values.BeginDate_1).format('YYYY-MM-DD')
       console.log(beginDate);
       //other things
    }
    

    根据material-ui/DatePicker docs

    格式日期:函数

    调用这个函数来格式化输入中显示的日期 字段,并且应该返回一个字符串。默认情况下,如果没有语言环境和 DateTimeFormat 提供日期对象格式为ISO 8601 YYYY-MM-DD.

    签名:

    function(date: object) => any
    date: Date object to be formatted.
    returns (any): The formatted date.
    

    【讨论】:

    • 收到此错误:TypeError: __WEBPACK_IMPORTED_MODULE_12_moment__(...).formate is not a function
    • 这是我的回答中的一个错字。它应该是 format 而不是 formate
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-23
    • 2020-01-07
    • 2021-10-12
    • 1970-01-01
    相关资源
    最近更新 更多