我有两个来自db的日期/时间,但是它们在视图上被分成四个(两个日期和两个时间),日期和时间都是自定义元素。见下文。Aurelia验证一个日期时间大于另一个
我的问题是我的开始日期/时间不能超过我的结束日期/时间更大。我知道如何在C#中执行此操作:
- 检查日期字符串是否包含默认时间00:00:00,如果是这样删除。在一个新的datetime /
- 重复进行第二次约会时
- 验证
- 解析日期/时间字符串是否从<到(
return from < to
)
但我不知道如何在奥里利亚做到这一点而不需要进行API调用。我已经注意到isLessThan
,但是我需要将我的字符串解析为日期时间,然后才能做到这一点。
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但是因为我需要首先改变这些成日期时间,并解析回来,我不知道我的意思,以提供在哪里。
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()
然而,这引发了“未处理的承诺拒绝类型错误:无法获取属性'datetimeformat'未定义或空引用”
如果我创建这个父之内,如何我把这个?即this.validator = this.validation.on(this).ensure(myMethod)?对不起,我对此很新,它花了我一段时间才把我的头转过来。 –