7

I am using ion-datetime for my appointment form. While inserting it is working fine without any problem. But when I need to update the inserted appointment date form details from back end, the date value is not displaying in ion-datetime.

Below is my code:

update.html:

<ion-item class="border-bottom">
      <ion-label  class="ionselect" >Appointment Date:</ion-label>
      <ion-datetime name="appdate" displayFormat="YYYY MMM DD" [(ngModel)]="leadDetailsUpdate.appt_date"></ion-datetime>
</ion-item>

update.ts:

leadDetailsUpdate={
        appt_date:''
}; 

The Date format I am getting from back end as follows: appt_date: "2017-01-01"

Below is the error message I am getting in console:

Error parsing date: "null". Please provide a valid ISO 8601 datetime format: https://www.w3.org/TR/NOTE-datetime

2
  • 1
    use toISOString() function to convert it to ISO before display it in ion date-time Commented Apr 12, 2017 at 5:44
  • let me know if it solves the issue Commented Apr 12, 2017 at 5:46

3 Answers 3

16

convert it to ISO format before displaying

var date = new Date('2017-01-01').toISOString()
console.log(date)

Sign up to request clarification or add additional context in comments.

8 Comments

Below is as I tried and its not coming : leadDetailsUpdate={ appt_date: 'new Date('appt_date').toISOString()' };
@AkashM Just create a new date using appt_date and assign it to appt_date again
If I use like you said: var date = new Date('appt_date').toISOString(); console.log(date); in console its coming as: 2017-01-01T00:00:00.000Z
@AkashM Please add the code where you are assigning value to appt_date as it is giving 'null' in your case
@AkashM also I used your string and it is working fine on Ionic 2. Are you using Ionic 1 because there is no such issue on Ionic 2 as you mentioned
|
4

Even Gaurav is right, I found that if your timezone is not +0, you can have problems with that. I found somewhere this solution:

let tzoffset = (new Date()).getTimezoneOffset() * 60000; //offset in milliseconds
this.startTime = (new Date(this.myStartTime - tzoffset)).toISOString().slice(0,-1);

Then in my HTML I have it like this:

<ion-datetime displayFormat="HH:mm" [(ngModel)]="startTime" (ionChange)="changeCheckOutStartTime()" style="padding-left: 21px"></ion-datetime>

And in the changeCheckOutStartTime() method, I take the time and create a moment:

changeCheckOutStartTime() {
   this.myStartTime = moment(this.startTime).toDate();
}

Comments

1

Using ISO format before displaying, like this:

this.myDate = new Date('2017-01-01').toISOString()

Will give us a difference of hours, each browser would do something different. In my case I had a difference of 5 hours (16/12/17 02:00 would be 16/12/17 07:00).

A better way would be to use moment as ionic recomends on its documentationn (https://ionicframework.com/docs/api/components/datetime/DateTime/#advanced-datetime-validation-and-manipulation)

Example:

  1. Open console at root proyect and install moment: npm install moment --S.
  2. Import moment in component file: import moment from 'moment';.
  3. Set value of model variable: this.myDate = moment().format().

The best would be create a pipe. Well check this demo http://plnkr.co/edit/MHjUdC for inspiration, goog luck :)

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.