2016-02-29 60 views
2

我有两个来自db的日期/时间,但是它们在视图上被分成四个(两个日期和两个时间),日期和时间都是自定义元素。见下文。Aurelia验证一个日期时间大于另一个

enter image description here

我的问题是我的开始日期/时间不能超过我的结束日期/时间更大。我知道如何在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'未定义或空引用”

回答

0

A-大量调查后,在这里和那里修复bug,我注意到优秀问题来自我的格式化类,它没有正确创建日期/时间(使用moment.js)(在用户从日历中选择之后),这意味着它返回了'无效日期',您无法比较: - |

这将工作:

this.validator = this.validation.on(this) 
        .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) }) 
          .withMessage('< Valid To') 
         .endIf() 
0

我建议使用无处不在的时刻。JS库在这种情况下:

jspm install moment

然后使用它像这样的例子:

import moment from 'moment'; 

export class MyViewModel { 
    date1 = "2016-02-29"; 
    time1 = "09:00:00"; 
    date2 = "2016-03-01"; 
    time2 = "13:00:00"; 

    myMethod() { 
    let isValid = moment(`${this.date1 this.time1`).isBefore(moment(`${this.date2 this.time2`)); 
    alert(isValid); 
    } 
} 
+0

如果我创建这个父之内,如何我把这个?即this.validator = this.validation.on(this).ensure(myMethod)?对不起,我对此很新,它花了我一段时间才把我的头转过来。 –

-1
.ensure('toDate', (config) => {config.computedFrom(['fromDate'])}) 
    .isGreaterThan(() => {return this.fromDate}, 'the entered Date'); 
+0

我如何连接日期和时间? –

相关问题