У меня есть форма в одном из моих компонентов с выбором даты. Конструктор этого компонента выглядит так.
constructor(public navCtrl: NavController, private formBuilder: FormBuilder,
private profileService: ProfileService) {
this.formIsValid = true;
let dobObj = JSON.parse(localStorage.getItem('current_profile')).stripeAccount.legal_entity.dob;
let dob = (dobObj.year && dobObj.month && dobObj.day) ? dobObj.year + "-" + dobObj.month + "-" + dobObj.day : '';
console.log(dob); // This prints "1999-12-31"
this.dobForm = formBuilder.group({
dob: [dob.toString(), Validators.required]
});
}
Я получаю следующее сообщение об ошибке из-за dob.toString(), который я использую для установки значения по умолчанию для моего средства выбора даты.
WARN: Error parsing date: "null". Please provide a valid ISO 8601 datetime format: https://www.w3.org/TR/NOTE-datetime
Я записал в консоль значение прямо перед formBuilder, и дата распечатывается, как и ожидалось. Похоже, что строка каким-то образом изменяется перед использованием для установки значения по умолчанию в formBuilder. Если я жестко запрограммирую строку «1999-12-31» в formBuilder вместо использования переменной, это сработает. Я даже проверил, что "dob === '1999-12-31'" правда.
Почему жестко заданная строка работает при установке значения по умолчанию, но переменная с точно таким же значением не работает?
РЕДАКТИРОВАТЬ:
Это должно быть ошибка с выбором даты. Если я ввожу «1999-12-31» как жестко закодированную строку, она работает, как и ожидалось. Если я ввожу «1997-1-1» или «1997-12-3», это не удается. Он принимает некоторые действительные даты, а не другие.
РЕДАКТИРОВАТЬ 2:
Проверь это:
constructor(public navCtrl: NavController, private formBuilder: FormBuilder,
private profileService: ProfileService, private loadingService: LoadingService) {
this.formIsValid = true;
//TODO: What??? Why is this happening?
console.log(new Date("1997-1-1")); // null
console.log(new Date("1999-12-31")); // "1999-12-31T00:00:00.000Z"
console.log(new Date("2010-11-7")); // null
console.log(new Date("1992-4-21")); // null
console.log(new Date("1842-2-27")); // null
console.log(new Date("2000-8-20")); // null
this.dobForm = formBuilder.group({
dob: ['', Validators.required]
});
}
Почему так много строк не могут быть преобразованы в даты? А чем отличается "1999-12-31" от остальных?
dob: [new Date(dob.toString()), Validators.required]
. В качестве альтернативы попробуйте:dob: [new Date(dob.toString()).toISOString(), Validators.required];
- person briosheje   schedule 24.01.2017