Мне нужно сделать форму на angular, и только для ввода даты я использую библиотеку материалов (чтобы получить средство выбора даты).
Вот как я объявляю свою форму:
this.editProfileForm = this.formBuilder.group({
lastname: [this._appState.user.lastName, Validators.required],
firstname: [this._appState.user.firstName, Validators.required],
email: [this._appState.user.email, [Validators.required, Validators.email]],
phone: [this._appState.user.phone.replace(/\s/g, ''), [Validators.pattern('[0-9]{10}')]],
birthdate: [this._appState.user.birthDate, [Validators.required]],
password: [''],
new_password: [''],
new_password_confirm: [''],
});
this.editProfileForm.setValidators([this.ageValidator]);
И ageValidator :
public ageValidator(form: FormGroup): any {
const birthdate = new Date(form.controls.birthdate.value);
const min_date = new Date();
min_date.setFullYear(min_date.getFullYear() - 15);
return (birthdate.getTime() < min_date.getTime() ? null : {minAge: true});
}
А вот HTML ввода даты и его ошибок:
<div class = "form-group">
<mat-form-field class = "example-full-width">
<input formControlName = "birthdate" matInput [matDatepicker] = "picker" [ngClass] = "{ 'is-invalid': submitted && (f.birthdate.errors || editProfileForm.hasError('minAge')) }">
<mat-datepicker touchUi #picker></mat-datepicker>
<span (click) = "picker.open()">test</span>
</mat-form-field>
<div *ngIf = "submitted && (f.birthdate.errors || editProfileForm.hasError('minAge'))" class = "invalid">
<div *ngIf = "editProfileForm.hasError('minAge') && !f.birthdate.errors">{{ 'COMPONENTS.REGISTER.BIRTHDATE_ERROR_AGE' | translate }}</div>
<div *ngIf = "f.birthdate.errors?.required">{{ 'COMPONENTS.REGISTER.FIELD_REQUIRED' | translate }}</div>
</div>
</div>
Моя проблема странная, и я не могу понять, почему она это делает.
Если я ввожу дату в формате, отличном от мм/дд/гггг, ввод говорит, что это требуется (например, если внутри ничего нет). Но когда я использую средство выбора даты, оно заполняет ввод датой в формате дд/мм/гггг, и в этом случае у меня нет ошибки (почему ??).
И если я ввожу дату в формате мм/дд/гггг (это тот, который не вызывает ошибку), а затем щелкаю, чтобы открыть средство выбора даты, дата преобразуется в дд/мм/гггг, и ошибка все еще не появляется . Не знаю, понятно ли мое объяснение.
У кого-нибудь есть идея?





Конечно, это зависит от вашего языкового стандарта, когда у вас есть формат мм/дд/гггг, вы не можете вводить такие значения, как 20/02/2019, как в формате дд/мм/гггг, они должны соответствовать вашему языку. Поскольку вы использовали средство выбора даты материала angular, чтобы изменить свою локаль, вы можете следовать примеру https://stackblitz.com/angular/lroqakengek стека.
Итак, мой указатель даты находится на французском языке (дд / мм / гггг), а мой ввод - на другом языке? (мм/дд/гггг), как я могу изменить формат ввода? Я бы хотел сохранить французский формат. А также, почему ввод говорит, что это необходимо, если внутри есть значение? Даже если значение неверно