Kendo Angular 2 Grid DateTime格式

时间:2017-04-10 17:51:43

标签: kendo-ui-angular2

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

无论我放入"过滤器"专栏的属性,我的日期似乎没有得到解析。

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

非常感谢任何帮助或建议!

----更新----

就像我最终做的快速更新一样:我只是创建了第二个字符串列并返回了一个格式化的日期字符串(我在检索时格式化)。然后当我排序时,我只是确保使用实际的DateTime列而不是显示列,以便它正确排序。这适用于我的需求。我想最初当我开始使用Angular 2网格时,我期待更多的客户端功能不在网格中(在排序方面等),但是一旦你正确绑定到一个网格,它并不是真的需要它后端api源。

4 个答案:

答案 0 :(得分:6)

您可以将日期格式设置如下:

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

答案 1 :(得分:6)

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

<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>
component.ts中的

函数拉出日期字符串的可用部分并将其转换为JS日期,以便日期管道可以使用它。

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

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

答案 2 :(得分:3)

为了使网格正确格式化日期,您需要将其转换为JS日期。我通常在从ajax调用的回调中检索来自服务器的数据。这样的事情:

&#13;
&#13;
field="SomeField" format='{0:d}
&#13;
&#13;
&#13;

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

这样您就可以将日期格式化为:

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

Where 
    [Revision Date] Between 
        DateAdd("d", IIf(Weekday(Date()) = 2, -3, -1), Date()) And 
        DateAdd("d", -1, Date())

希望有所帮助。

答案 3 :(得分:1)

使用EF Core格式的字符串,即。 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;
}