How to get Material-UI Date Picker value

12,728

Solution 1

you are getting the date you are just missing the formatting when you have this information "Fri Oct 20 2017 16:50:33 GMT+0100 (BST)" do something like this

      var date = new Date("Fri Oct 20 2017 16:50:33 GMT+0100 (BST)")
      var finaldate = date.getDate() + '-' +  (date.getMonth() + 1)  + '-' +  date.getFullYear()

at the end you will have finaldate = "20-10-2017"

hope this helps.

Thank you

Solution 2

You need to convert the Date-Picker into a controlled input. The object with which the Date-Picker can bind is a Date object. So your initial state should look like

this.state={appointmentDate:null}

Then you can bind your date with the following control.

 <DatePicker
      hintText="Select the date"
      formatDate={(date) => moment(date).format('DD-MM-YYYY')}
      onChange={this.handleChange1.bind(this)} 
      value={this.state.appointmentDate}/>

with the handlechange function being

handleChange1(e, date){
    this.setState({
       appointmentDate: date
    });
}

If you want to store the formatted string of the date as a separate entry in your state, you can do so using the handleChange1 function

handleChange1(e, date){
        this.setState({
           appointmentDate: date,
           appointmentDateString:  moment(date).format('DD-MM-YYYY')
        });
    }
Share:
12,728

Related videos on Youtube

Jay240692
Author by

Jay240692

New android app developer, learning the trade

Updated on June 04, 2022

Comments

  • Jay240692
    Jay240692 about 2 years

    I am using material-ui datepicker. What i am trying to do is get the value selected by the user and set it to state however i am struggling to figure this out so any help would be much appreciated.

    So here is what i am doing at the moment:

    My datepicker component looks like this:

    <DatePicker
      hintText="Select the date"
      formatDate={(date) => moment(date).format('DD-MM-YYYY')}
      onChange={this.handleChange1.bind(this)} />
    

    the handleChange1 function:

    handleChange1(e, date){
     this.setState({
       appointmentDate: date.value
    })
     console.log(e, date);
     console.log(this.state.appointmentDate;
    }
    

    The Constructor:

    constructor(props){
     super(props);
      this.state = {
       appointmentDate: '',
       appointmentTime: ''
     };
    

    All of the above give me the following in the console....

    null Fri Oct 20 2017 16:50:33 GMT+0100 (BST)
    

    AND

     _blank log_     
    

    However, in the textfield once the user selects the date i can see the date being rendered correctly like 20-10-2017

    The date being displayed to the user is what i want to store to state. Can someone explain how this can be achieved?

    Thanks