У меня есть две даты/времени, которые исходят от db, однако они разделены на четыре (две даты и два раза) на представлении, и дата и время являются пользовательскими элементами. Смотри ниже.Aurelia validate one datetime больше, чем другой
Моя проблема моя дата/время начала не может быть больше, чем мой даты/времени. Я знаю, как это сделать в C#:
- Проверьте, содержит ли строка даты значение по умолчанию 00:00:00, если так удалить.
- парсинга строки даты/времени в новом DateTime
- Повторите для второй даты/времени
- Validate ли от < до (
return from < to
)
Но я не знаю, как сделать это в Aurelia без вызова API. Я отметил isLessThan
, однако мне нужно было бы разобрать мои строки в datetime, прежде чем я смогу это сделать.
bind(){
return this.dataContext.getContent(this.id)
.then(baseContent => {
this.baseContent = baseContent;
this.validator = this.validation.on(this)
.ensure('baseContent.ValidFromDate').isNotEmpty()
.ensure('baseContent.ValidFromTime').isNotEmpty()
.ensure('baseContent.ValidToDate').isNotEmpty()
.ensure('baseContent.ValidToTime').isNotEmpty()
.ensure('baseContent.ValidFromDate/baseContent.ValidFromTime').isLessThan('baseContent.ValidToDate/baseContent.ValidToTime')
;
}); }
Я знаю, что вышеизложенное не работает, я новичок в Aurelia и все еще нахожу свои ноги с ним.
UPDATE
Я попытался следующие, но получил:
Unhandled promise rejection TypeError: path.split is not a function
Я думаю, что этот вопрос он не знает, что назначить сообщение об ошибке, но я могу ошибаться ,
.ensure(this.datetimeformat.format(baseContent.ValidFromDate, baseContent.ValidFromTime)).isLessThan(this.datetimeformat.format(baseContent.ValidToDate, baseContent.ValidFromTime));
import moment from 'moment';
export class DateTimeFormat {
format(date, time) {
if (date.indexOf("T") > -1) {
date = date.split('T')[0];
}
return moment(date + 'T' + time, 'DD/MM/YYYY HH:mm:ss');
}
}
Я заметил один из ответов использовали computedFrom однако, как мне нужно сначала изменить их в DateTime, и разобрать назад я не знаю, что я имел в виду, чтобы обеспечить, где.
UPDATE
.ensure('baseContent.ValidFromDate', (config) => { config.computedFrom(['baseContent.ValidFromDate', 'baseContent.ValidFromTime', 'baseContent.ValidToDate', 'baseContent.ValidToTime']) }).isNotEmpty().passes(() => {
return this.datetimeformat.format(this.baseContent.ValidFromDate, this.baseContent.ValidFromTime) < this.datetimeformat.format(this.baseContent.ValidToDate, this.baseContent.ValidToTime);
})
Я думаю, что я все ближе, но до сих пор не работает :-(
Я также попытался
.ensure('baseContent.ValidFromDate', (config) => { config.computedFrom(['baseContent.ValidFromDate', 'baseContent.ValidFromTime', 'baseContent.ValidToDate', 'baseContent.ValidToTime']) }).if(() => {
return this.baseContent.ValidFromDate !== null && this.baseContent.ValidFromTime !== null && this.baseContent.ValidToDate !== null && this.baseContent.ValidToTime !== null})
.passes(() => {return this.datetimeformat.format(this.baseContent.ValidFromDate, this.baseContent.ValidFromTime) < this.datetimeformat.format(this.baseContent.ValidToDate, this.baseContent.ValidToTime)})
.endIf().isNotEmpty()
нет ошибок с помощью инструментов разработчика.
function validateFromDateTimeIsBeforeToDateTime(dateFrom, timeFrom, dateTo, timeTo) {
debugger;
if (dateFrom !== null && dateFrom !== undefined &&
timeFrom !== null && timeFrom !== undefined &&
dateTo !== null && dateTo !== undefined &&
timeTo !== null && timeTo !== undefined) {
return this.datetimeformat.format(dateFrom, timeFrom) < this.datetimeformat.format(dateTo, timeTo);
}
else {
return true;
}
}
.ensure('baseContent.ValidFromDate').isNotEmpty().passes(validateFromDateTimeIsBeforeToDateTime(this.baseContent.ValidFromDate, this.baseContent.ValidFromTime, this.baseContent.ValidFromDate, this.baseContent.ValidFromTime))
.ensure('baseContent.ValidFromTime').isNotEmpty()
.ensure('baseContent.ValidToDate').isNotEmpty().passes(validateFromDateTimeIsBeforeToDateTime(this.baseContent.ValidFromDate, this.baseContent.ValidFromTime, this.baseContent.ValidFromDate, this.baseContent.ValidFromTime))
.ensure('baseContent.ValidToTime').isNotEmpty()
Это, однако, бросает «Необработанное отказ обещания TypeError: Невозможно получить свойство„DateTimeFormat“неопределенной или нулевой ссылки»
Если я создаю это в пределах родителя, как я называю это? т. е. this.validator = this.validation.on (this) .ensure (myMethod)? Извините, я довольно новичок в этом, его время от времени ложится вокруг меня. –