2017-04-10 116 views
0

有谁知道如何在网格中正确格式化DateTime? (这个数据类型是否支持?)。Kendo Angular 2 Grid DateTime格式

无论我放在列的“过滤器”属性中,我的日期似乎都不会被解析。

我看到显示该值:/日期(1480643052457)/

任何帮助或建议,不胜感激!

---- ----更新

就像什么我最后做一个快速更新:我简单地创建第二个字符串列,并在点返回格式化的日期字符串(即I格式恢复)。然后,当我排序,我只是确保使用实际的日期时间列,而不是显示列,以便它正确排序。这对我的需求很好。我认为最初当我开始使用Angular 2网格时,我期望更多的客户端功能脱离网格(在排序等方面),但是一旦您正确绑定到后端api源代码,它并不是真正需要的。

+0

您是否尝试过使用列模板?它工作正常,如果你做 – mast3rd3mon

+0

不,我没有模板....我可以做到这一点。如果我只是在获取数据时转换为服务器上的字符串,它也可以工作。我只注意到它应该“在应用绑定时自动分析/接受日期时间作为传递的数据数组中的有效格式。 – BriDev

+0

从我知道,theres没有日期时间过滤器,我只是使用模板作为它更容易,需要一个例子? – mast3rd3mon

回答

1

您可以格式化如下日期:

kendo-grid-column field="createdOn" format='{0:MM/dd/yyyy HH:mm:ss} 
0

为了使电网正确格式的日期,你需要将其转换成JS日期。我通常在ajax调用的回调函数中从服务器中检索数据。类似的东西:

api.get('some server url').then(function(data) { 
 
    if (data.SomeDate) data.SomeDate = new Date(data.SomeDate); 
 
});

(这是一个伪代码,不要直接使用它)

这将让你的日期格式为:

field="SomeField" format='{0:d}

field="SomeField" format='{0:MM/dd/yyyy h:mm a} 

希望有所帮助。

+0

你能够使用属性格式化日期吗? 因此,例如:format ='{0:foo.DateFormat}' –

+0

嗯,不知道,我从来没有尝试过。 – dpdragnev

+0

询问的原因是我希望在配置文件中使用列日期格式定义,而不是在列定义中。这样你只需要修改一次。 –

1

我在模板列中使用日期管道解决了同样的问题。确保你检查空值。在component.ts

<kendo-grid-column title="Last Login" width="100"> 
    <ng-template kendoGridCellTemplate let-dataItem> 
     <div *ngIf="dataItem.lastLoginDate!=null">{{ formatDate(dataItem.lastLoginDate) | date:"shortDate" }}</div> 
    </ng-template> 
</kendo-grid-column> 

功能拉出日期字符串的可用部分并将其转换为一个JS日期,以便日期管可以使用它。

formatDate(myStringDate) { 
    return new Date(parseInt(myStringDate.substr(6))); 
} 

我用shortDate格式,但你可以找到更多的格式选项这里包括时间格式: Angular 2 Date Pipe Formatters

0

与EF核心的格式,即一个字符串工作。 YYYY-MM-DDTHH:MM:SS,我能够在服务中使用它来将拼接日期格式化到调用中(在这种情况下为read),以准备用于网格消耗的API数据。工作发生的地方是extractData,我从这个主题Angular 2 Date deserialization中获得并为我的目的进行了改进。希望它能拯救一个人的悲伤。

我应该添加,这是在作为扩展BehaviorSubject构造的服务的上下文中。这与Telerik的反应形式编辑模型一起使用:

private fetch(action: string = "", data?: ISomething[], guid?: string): Observable<ISomething[]> { 

    let options = new RequestOptions(); 
    options.body = this.serializeModels(data); 
    return this.http 
     .get('api/controllername/controllerget', options) 
     .map(response => response.json()).catch(this.handleError); 
} 


public read() { 

    this.reset(); 

    if (this.data.length) { 
     return super.next(this.data); 
    } 

    this.fetch() 
     .do(data => this.data = data) 

     .subscribe(data => { 
      this.extractData(data) 
      super.next(data); 
     }); 
} 

private extractData(data?: any) { 
    data.forEach((d) => { 
     d.datefieldname = new Date(d.datefieldname); 
    }); 
    return data; 
}