So I am trying to display this date for an input. But it's not displaying when setting the value of it in my form builder group. I would also like to be able to format it too.
this.post.startDate is of type Date
Whats in .ts
this.editForm = this.formBuilder.group({
startDate: [this.post.startDate, Validators.compose([Validators.required])],
endDate: [this.post.endDate, Validators.compose([Validators.required])]
});
My reactive form has this
<form [formGroup]="editForm" (ngSubmit)="saveDate()">
<label>Start Date: </label>
<input type="date" formControlName="startDate" name="startDate" />
<br />
<label>End Date: </label>
<input type="date" formControlName="endDate" name="endDate" />
<br /><br />
<input type="submit" value="Create Date">
</form>
For setting default date value to <input> tag with type date you should use HTML-property value of input-tag. Variant 2 (recommended): You can use an built-in function formatDate() in angular.
Setting or Updating of Reactive Forms Form Control values can be done using both patchValue and setValue. However, it might be better to use patchValue in some instances. patchValue does not require all controls to be specified within the parameters in order to update/set the value of your Form Controls.
You have two possibilities to set you date as default value.
Variant 1:
For setting default date value to <input>
tag with type date you should use HTML-property value
of input-tag.
Example:
<form [formGroup]="editForm2">
<input type="date" formControlName="startDate" value="{{ post.startDate | date:'yyyy-MM-dd' }}">
<input type="date" formControlName="endDate" value="{{ post.endDate | date:'yyyy-MM-dd' }}">
</form>
Variant 2 (recommended):
You can use an built-in function formatDate()
in angular.
Step 1:
Import formatDate()
from @angular/common
in you component typescript file.
import { formatDate } from '@angular/common';
Note: formatDate(yourDate, format, locale)
expects 3-4 parameters.
Step 2:
Format your dates in definition of your form group.
this.editForm = this.formBuilder.group({
startDate: [formatDate(this.post.startDate, 'yyyy-MM-dd', 'en'), [Validators.required]],
endDate: [formatDate(this.post.endDate, 'yyyy-MM-dd', 'en'), [Validators.required]]
});
Here is working example: https://stackblitz.com/edit/angular-kucypd
Here is documentation of input type date: https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input/date
Try the built-in formatDate package.
import { formatDate } from '@angular/common'
and then convert your date and set it to the datepicker control
this.yourForm.controls.controlName.setValue(formatDate(date,'yyyy-MM-dd','en'));
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With